有如下代码:
char Char_a = -129; printf("%d\n",Char_a);
求输出结果。
运行后输出127 。
看了这个结果没什么想法,不知道这么计算出来的。看了下C语言和网上资料总结如下:
教程上有-1的补码表示过程如下:
负1原码:10000001
负1反码:11111110
负1补码:11111111
这样算其实不正确,实际计算机按如下操作计算负1补码:
1原码:00000001
发现是负数做两步:
1反码:11111110
1补码:11111111(-1)
计算机用负数的绝对值的补码表示这个负数
这样既可以解释-129了,如下:
129原码:10000001
129反码:01111110
129补码:01111111(+127)
这样也可以解释char 范围从-128~127
-128为什么表示成10000000
128原码:10000000
128反码:01111111
128补码:10000000(-128)