参考:https://www.cnblogs.com/zhangziqiu/archive/2011/03/30/computercode.html
在计算机系统中,数值一律用补码来表示(存储)和运算。
int main()
{
unsigned char a = 255;
char b = a;
printf("%d\n", b);
}
程序输出 -1。是因为:
a是无符号的,所以最高位也是数据位,而不是符号位。
a的原码、反码、补码均为:1111,1111
b = a
这一句只是把 a 的补码赋给了 b 的补码,只是解释方式不一样了。
对于 b 的补码 1111,1111
,由于 b 是有符号数,所以可以求得其原码为 1000,0001
,即 -1.