C语言unsigned char x=-1;printf("%d\n",x);为何输出会是255?

如题所述

第1个回答  2020-05-05
需要了解整数在计算机中的编码
,对于整数在计算机中一般是原码、反码、补码三种编码方式,以-1为例。选择8位的二进制数来表示:
-1的原码
10000001
//最高位为符号位
-1的反码
11111110
//符号位不变,各位求反
-1的补码
11111111
//符号位不变,反码加1
所以,当使用unsigned
char
即无符号整数时,-1用补码表示即1111
1111,十六进制表示为0xff
十进制表示即为255。
第2个回答  2019-05-07
计算机中,有符号数用补码(按位取反加1)表示,其最高位表示符号(0正1负);-1的补码(1111
1111)对应的无符号数就是255
大家正在搜