问个笔试题目
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。