1.char c=128 用%d打印,结果是什么?为什么?
#include <stdio.h>
int main(int argc, const char *argv[])
{
char c = 128;
printf("%d\n",c);
return 0;
}
结果:-128
原因:计算机能识别的是二进制补码,将128转换成二进制1000 0000 ,这个为补码,原码=反码+1.因此原码为1000 0000等于-0,-0为特殊值,-0=-128.所以输出结果为-128
2.unsigned char c=-1,用%u打印,结果是什么?为什么?
结果:255
原因:-1为补码,将-1转换为二进制码1000 0001 转换成源码为1111 1111,转换成十进制等于255.
3.char 类型数据中存储0x9c,用%d打印的值是什么?写出运行结果(补码,反码,源码推算过程写出来)
结果:
原因:将0x9c转换成二进制1001 1100
补码:1001 1100
反码:1110 0011
源码:1110 0100
转换成十进制等于-100.