首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

问个笔试题目,该如何解决

2012-03-29 
问个笔试题目unsigned short A 10printf(~A %u\n, ~A)char c128printf(c%d\n,c)输出多少?答

问个笔试题目
unsigned short A = 10; 
printf("~A = %u\n", ~A); 
char c=128; 
printf("c=%d\n",c); 

输出多少?

答案是4294967285和-128

哪位给解释详细点,这个怎么得到的,这类题目该怎么做

[解决办法]
第一个转换成2进制,然后所有的位取反
第2个 char 的表示范围是-128 - 127 ,C = 128时,转换成整数就是-128了
[解决办法]
unsigned short A = 10; 
~A是非的意思,对A的每位按位取反,printf这里%u把A会转换成unsigned int的,所以会变成4294967285,你可以用你附件里的计算器验证一下。16进制的A,双字取非Not运算,结果的十进制就是你的数字。


[解决办法]
1)A=16个1+0000 0000 0000 1010
 ~A=16个0+1111 1111 1111 0101=2^32-1(全1的和)-10=4 294 967 296 - 1 -10 =4294967285
2)char 表示的范围是-128-127可以看成一个循环,当过了127就是128同样,此题如果赋给c =-129,输出会是127



[解决办法]
~A是取反
就是0000 0000 0000 1010 取反为 1111 1111 1111 0101

char c=128;
printf("c=%d\n",c);

char 的取值范围是 -128 -- 127 
128的时候就是 127 + 1 溢出了,为 -128
[解决办法]
来晚了~~~嗨
[解决办法]
LS说的都很清楚了
[解决办法]
本人强烈支持1楼
[解决办法]
做这种题的关键就是深入理解C的数据类型(char,short,int,long),
包括它们的bit范围,取值范围,字面值,以及cast。

热点排行