技术标签: c语言中百分号4d
字符的参数类型 ;输出形式
d,i int类型;显示一个带符号的十进制数(i和d用在scanf函数中时是不同的)。
o int类型;无符号八进制数(没有前导0)
x,X int类型;显示一个无符号的十六进制数,X可用来显示数字0~9和字母A~F,x可用来显示数字0~9和字母a~f 。
u int类型;无符号十进制数
c int类型;单个字符
s char *类型;顺序打印字符串中的字符,直到遇到'/0'或已打印了由精度指定的字符数为止。
f double类型;十进制小数[-]m.dddddd,其中d的个数由精度指定(默认值为6)
e,E double类型;[-]m.dddddde+/-xx或[-]m.ddddddE+/-xx,其中d的个数由精度指定(默认值为6)
g,G double类型;如果指数小于-4或大于等于精度,则用%e或%E格式输出,否则用%f格式输出。尾部的0和小数点不打印。
p void *类型;指针(取决于具体实现)
% 不转换参数;打印一个百分号% 字母h或l,字母h表示将整数作为short类型打印,字母l表示将整数作为long类型打印。
用于存放输出数据的宽度称为“域宽”。如果域宽大于被打印数据的宽度,数据通常会在域内右对齐。如果输出值的宽度大于域宽时,域宽是自动增长的。域宽通常插在百分号和转换说明符之间。
printf("M/n",123)
printf("M/n",1234)
printf("M/n",12345)
则输出结果为:
123
1234
12345
用printf函数也可以指定输出数据的精度。对於不同的数据类型,精度有不同的含意。
用于整数转换说明符,精度表示至少要输出的数字个数(如果被输出的数字个数小於只指定的精度,就在输出值前面加0)。
printf("%.4d/n",873)
printf("%.9d/n",873)
则输出结果为:
0873
000000873
sprintf(s, "X", 4567); 和sprintf(s,
"%.8X", 4567); 这两种写法是一样的。
printf( "%.8X", 4567);和printf( "X", 4567);这两种写法也是一样的
。X 和 %.8X
都表示将对应变量转换为16进制无符号数之后如果目标数字不满8位,则在其左侧补0以填满8位,然后输出。
用于浮点数转换说明符e、E、f,精度是小数点后面显示的数字个数。
printf("%.3f/n",123.45678)
printf("%.3e/n",123.45678)
则输出结果为:
123.456
1.235e+02
用于浮点数转换说明符g、G,精度是打印出的有效数字的最大个数。
printf("%.3g/n",123.45678)
则输出结果为:
123
用于字符串说明符s时,精度是被输出的字符的最大个数。
printf("%.11s/n","Happy birthday")
则输出结果为:
Happy birth
例如:
打印字符串“hello,
world”(12个字符,此处未包含/0)时根据不同的转换说明产生的不同结果。我们在每个字段的左边和右边加上冒号,这样可以清晰地表示出字段的宽度。
:%s: :hello, world:
:s: :hello, world:
:%.10s: :hello, wor:
:%-10s: :hello, world:
:%.15s: :hello, world:
:%-15s: :hello, world :
:.10s: : hello, wor:
:%-15.10s: :hello,
wor :
-(减号): 使输出在域宽中左对齐。
例1. 输出整数
#include
main( )
{
printf("%d/n",455);
printf("%i/n",455);
printf("%d/n",+455);
printf("%hd/n",32000);
printf("%ld/n",2000000000);
printf("%o/n",455);
printf("%u/n",455);
printf("%u/n",-455);
printf("%x/n",455);
printf("%X/n",455);
return 0;
}
上面的程序输出以下的结果
455
455
455
32000
2000000000
707
455
4294966841
1c7
1C7
printf("%u/n",-455);输出的是4294966841
-1 原码1000000000000001
-1补码 1111111111111111
-1变成无符号数是65535
-455变成无符号数输出65081,按长整型输出4294966841.
长整型-455的源码是
10000000 00000000 00000100 01010101
补码是
11111111 11111111 11111011 10101011
变成无符号数是2~31+2~30+2~29..........
同理:
unsigned short si = -1;
这句话 在赋值的时候发生隐式类型的转换。
如果没有截断、提升,那么 si 内存中的二进制内容和 -1 一样,但是会按照 unsigned short类型来 解释。这和
unsigned short si = 'a' 是一个道理。
因此只要你写下 -1 那么它就是个 signed,至于你赋值给 unsigned 或者 double,都不改变 -1 是 signed
这个事实。
但是编译器可能会发出警告。 可以用如下这种的方法来强行赋值:
unsigned short si = (unsigned short) -1;
结果为 si = 0xFFFF (65535)
printf("%d/n",+455);输出的是455
%d是有符号整型,但是输出时不输出正号,负数却输出负号。如果你想输出正号,那就在%e前面加一个正号,然后可以在前面加个条件判断。
例2. 输出浮点数
#include
main( )
{
printf("%e/n",1234567.89);
printf("%e/n",+1234567.89);
printf("%e/n",-1234567.89);
printf("%E/n",1234567.89);
printf("%f/n",1234567.89);
printf("%g/n",1234567.89);
printf("%G/n",1234567.89);
return 0;
}
上面的程序输出以下的结果
1.234568e+06
1.234568e+06
-1.234568e+06
1.234568E+06
1234567.890000
1.234567e+06
1.234567E+06
默认情况下,用转换说明符e、E、和f打印出的值带6个小数位。
例3. 输出域宽
#include
main( )
{
printf("M/n",1);
printf("M/n",12);
printf("M/n",123);
printf("M/n",1234);
printf("M/n/n",12345);
printf("M/n",-1);
printf("M/n",-12);
printf("M/n",-123);
printf("M/n",-1234);
printf("M/n",-12345);
return 0;
}
上面的程序输出以下的结果
1
12
123
1234
12345
-1
-12
-123
-1234
-12345
还可以用如下方法表示:
(例) printf("%*.*s/n",m,n,ch);
前边的*定义的是总的宽度,后边的定义的是输出的个数。分别对应外面的参数m和n。这种方法的好处是可以在语句之外对参数m和n赋值,从而控制输出格式。
例如
printf("%*d",5,5) 等于 printf("]",5)
printf("%*d",9,3) 等于 printf("�",3)
函数sprintf执行的转换和函数printf相同,但它将输出保存到—个字符串中。
int sprintf(char *string, char *format, arg1, arg2, ...);
sprintf函数和printf函数一样,按照format格式格式化参数序列arg1、arg2、…,但它将输出结果存放到string中,而不是输出到标准输出中。当然,string必须足够大以存放输出结果。
1234/100如果变量是用int定义的,那就是12啊,因为是整型的,只保留整数部分
如果用float定义就可以得到小数部分了。
printf是标准输出流的输出函数,用来向标准输出设备输出;
fprintf则是向文件输出,将输出的内容输出到硬盘上的文件中 。
fprintf(fp,"%s",name); fp为文件指针。
fprintf(stdout,"%s",name); 和 printf("%s",name);
是完全一样的(前提是你的标准输出是指向显
示器,不过一般标准输出都是显示器)。
sprintf可以把整数打印到字符串中,在大多数场合中sprintf可以替代itoa。
例如:
sprintf(s, "%d", 123); 把整数123 打印成一个字符串保存在s中。
sprintf(s, "��", 123, 4567); 产生:" 123 4567" 可以指定宽度,不足的左边补空格。
sprintf(s, "%-8d�", 123, 4567); 产生:"123 4567" 其中123左对齐。
例如:
也可以按照16 进制打印如下。
sprintf(s, "%8x", 4567); 小写16
进制,宽度占8 个位置,右对齐。
sprintf(s, "%-8X", 4568); 大写16 进制,宽度占8 个位置,左对齐。
这样,一个整数的16 进制字符串就很容易得到。
在打印16 进制内容时想要得到左边补0 的等宽格式,那在表示宽度的数字前面加个0 就可以了。
例如:
sprintf(s, "X", 4567); 产生:"000011D7"
以“%d”进行的十进制打印同样可以使用这种左边补0 的方式来得到等宽格式。
sprintf(buff,"%s",name); buff为字符数组。将name输入到名为buff指向的字符串中。
sprintf能把一个int型按逐个字符转换成char型。
例如:
int a = 12345;
char s[10] = "";
sprintf(s,"%d",a);
可得 s[0]=1; s[1]=2; s[2]=3; s[3]=4; s[4]=5; 及转换成了char型。
文章浏览阅读2.9k次。为什么要特征描述子?因为用点特征描述的(法线、曲率等)只能是用少部分的参数来代表一段几何区域,描述参数太少。所以通过参数化 查询点和领域点的空间差异 形成了特征描述子。PFH:该方法是使用 一对点 通过局部坐标系来建立对应的关系的(因为是一对点,所以具有一定的抗干扰性,比如抗旋转),但是对法线计算的准确性的依赖比较大。将(x,x,x)看作空间的点 ,最后做投票选择,最后在展开。(pcl 源码将f1,f2,f3归一化后放入直方图,好像还用到了哈希表存储。)这里注意的是它..._fpfh特征知乎
文章浏览阅读589次。在vue项目中使用moment.js_vue 使用moment时间格式化
文章浏览阅读1.4k次。实验八通过NFS挂载根文件系统【实验目的】 掌握bootcmd、bootargs环境变量的设置和NFS挂载根文件系统的方法。 说明:在实验中命令行提示符为“$”表示在主机上运行,“#”表示在目标板上运行。【实验环境】1. Ubuntu 12.04 32位发行版2. FS6818平台【实验步骤】1. 将“案例源码\第一天\镜像文件\rootfs.tar.xz”拷贝至Ubu..._info: task swapper/0:1 blocked for more than 10 seconds.
文章浏览阅读890次。报错信息如下:org.apache.thrift.transport.TTransportException: java.net.SocketTimeoutException: Read timed outat org.apache.thrift.transport.TIOStreamTransport.read(TIOStreamTransport.java:129)at org.apache...._springboot resttemplate java.net.sockettimeoutexception: read timed out
文章浏览阅读500次。[cpp] view plaincopy static_cast和reinterpret_cast揭秘 收藏 本文讨论static_castreinterpret_cast reinterpret_cast可以转换任意一个32bit整数,包括所有的指针和整数。可以把任何整数转成指针,也可以把任何指针转成整数,以及把指针转化为任意类型的指针,威力最_static_cast rep
文章浏览阅读1.5k次。Hadoop之JDK配置步骤总结:(1)下载,我的是jdk-8u181-linux-x64.tar.gz(2)放到某目录下(移动到某目录下命令:mv 某文件名 目录名),然后解压(tar -zxvf +压缩包名称)(3)环境变量配置,一般在 /etc/profile 或 ~/.bashrc文件下(4)使环境变量生效 source /etc/profile或 source ~/.bas..._hadoop 2.7 使用jdk版本
文章浏览阅读263次。Preface最近在做 video caption 相关,要处理大量视频。Method 1方法 1 是最简单的,用 FFmpeg工具来完成。具体的网上有很多这方面的资料,本人只是简单了解了一下如何使用。如下图,有一个名为 ffmpeg_test.avi的视频:在当前目录打开终端,输入如下命令:$ffmpeg -i ffmpeg_test.avi frames_%03d.jpg -hide_bann..._cap.read() 每隔一秒获取一帧
文章浏览阅读1.1k次。I start image picker intent using:final Intent pickIntent = new Intent(Intent.ACTION_PICK, MediaStore.Images.Media.EXTERNAL_CONTENT_URI);pickIntent.putExtra(Intent.EXTRA_ALLOW_MULTIPLE, true);startAct..._java.lang.securityexception: not allowed to access cell info
文章浏览阅读295次。最近写前端时发现setTimeout和for循环相遇时,会发生一些特殊的情况,与预期的执行结果不符。for (var i=1; i<=5; i++) { setTimeout( function timer() { console.log( i ); }, i*1000 );}上述代码的执行结果为:6,6,6,6,6这似乎与预期的1,2,3,4,5结果不符。理想的执行步骤:但是实际的执行步骤:经过查阅资料,js存在同步和异步的执行机制,同步事件的优_js 循环settimeout异步执行
文章浏览阅读1.8w次,点赞12次,收藏54次。接触GDAL有四五年多时间了,平时都是在C++下使用,最近需要在C#下调用GDAL,所以就开始学习了下,相比C++调用,C#下使用GDAL做图像处理的效率有点低,但是其简单易学,适合菜鸟上手,现把自己刚学到的心得跟大伙分享下,以遥感影像的显示为例。1、 程序环境搭建 首先,需要编译GDAL库的源代码。 GDAL是一个非常强悍的遥感数据格式解析库,支持多种_c#调用遥感图像处理库
文章浏览阅读55次。实现居中的方案有很多,这里介绍下纯CSS使用absolute配合margin的方案。1. p宽高固定width: 400px;height: 200px;position: absolute;top: 50%;left: 50%;margin-top: -100px;margin-left: -200px;margin-top为-(height / 2),margin-left为-(width /..._"居中"
文章浏览阅读3.2k次。出处:http://chenzhou123520.iteye.com/blog/1863407乐观锁介绍:乐观锁( Optimistic Locking ) 相对悲观锁而言,乐观锁假设认为数据一般情况下不会造成冲突,所以在数据进行提交更新的时候,才会正式对数据的冲突与否进行检测,如果发现冲突了,则让返回用户错误的信息,让用户决定如何去做。那么我们如何实现乐观锁呢,一般来说有以下2种方式:1.使用数..._乐观锁这个verison有什么用