北京密云区有钱人多吗:关于C语言的问题??

来源:百度文库 编辑:神马品牌网 时间:2024/04/30 11:04:09
int a=-1;
printf("%x,%O,%d",a,a,a);
为什么这个小程序的输出结果是
ffff,177777,-1
int a=-1
printf("%x",a);
为什么结果会是ffff
实在是看不明白啊

同意楼上的!
为了保证 A + (-A) = 0,负数使用了补码表示形式,
-A = |A|反码 + 1
1在16位中为 0 0000000 00000001
正|负 高位 底位
-1 = 1的反码 加上 1
0 0000000 00000001---------------1
1 1111111 11111110---------------1的反码
1 1111111 11111111--------------- -1
0 0000000 00000001--------------- 1+ -1=0

给你个系统的例子,当然你要的也在里面,看了之后你对pringf语句会有更深的理解
int a=123,b=12345,c=-1; 变量定义,整型,赋初值
float f=123; 变量定义,浮点实数,赋初值
printf("%4d,%4d,%d,%o,%x,%X\n",a,b,c,c,c,c);
printf("%f,%10f,%10.2f,%-10.2f,%e\n",f,f,f,f,f);
printf("%3s,%7.2s\n","hello","HELLO");
printf("%.4s,%-5.3s\n","HELLO","hello");
printf("\"\x48\x65\x6c\x6c\x6f\x2c\x57\x6f\x72\x6c\x64\x21\"\n");

后面五行都是输出,不过格式不同,其具体含义如下(注意:C语言的输出格式非常复杂):

d格式符,用来输出十进制整数.

⑴%d,按整型数据的实际长度输出.

⑵%md,m为指定的输出字段的宽度,数据位数小于m,左边补空格,若大于m,按实际长度输出

⑶%ld,输出长整型数据(long)

o格式符,以八进制输出整数(不带符号,他将符号位也作为八进制数的一部分了)
⑴%o,参考%d的解释.

⑵%lo,参考%ld的解释.

⑶%mo,参考%md的解释.

X格式符,以十六进制输出整数
也是3种参考%d的解释.

★u格式符,用来将unsigned型数据,既无符号数,以十进制形式输出

★c格式符,输出一个字符.

★s格式符,输出一个字符串.

⑴%s,如printf("%s","CHINA")

⑵%ms,输出的字符串占m列,字符串长度小于m,左边补空格,如果超出则全部输出.

⑶%-ms,串小于m,则在m列范围内字符串左靠,右补空格.

⑷%m.ns,输出占m列,但只取字符串左端n个字符.这n个字符输出在m列的右边,然后左边补空格.

⑸%-m.ns,和上面的放下,就是n个字符输出在m列的左侧,右边补空格.n>m,那么m自动取n的值,既保证n个字符正常输出.

printf("%3s,%7.2s,%.4s,%-5.3s\n","CHINA","CHINA","CHINA","CHINA");

★f格式符,用来输出实数,以小数形式输出.

⑴%f,全部输出,而且输出6位小数.

⑵%m.nf,输出数据共占m列,n位小数,如果数据长度小于m那么左边补空格

⑶%-m.nf,和上面的m.nf相反,为左靠齐,右补空格.

★e,E格式符,以指数形式输出实数

⑴%e,不指定输出数据所占的宽度和数字部分的小数位数.

⑵%m.ne和%-m.ne,这里n指小数部分的位数

★g,G格式符,用来输出实数,它根据数值大小,自动选择f格式还是e格式,(选占宽最少的一种),且不输出无意义的0.这种格式用的不多.

那么,对照以上内容,这个程序的输出就应该是:

第一行 123,12345,-1,177777,ffff,ffff
第二行123.000000,123.000000, 123.00,123.00 ,1.23000e+2
第三行hello, HE
第四行HELL,hel
第五行"Hello,World"

前两个输出的是补码,第三个输出的是十进制的-1

这么多例子.你花了不少时间吧.

-1的补码是65535