#include <stdio.h>
int main(int argc, const char * argv[]) {
char c1 = 255;
printf("%d\n",c1);
return 0;
}
打印结果:-1
分析:
255 是一个整数,在计算机中, 数字存其补码, 正数的原反补都是其本身
这里不妨将 255 看成一个 int 占用4个房间(字节):
0000 0000 0000 0000 0000 0000 1111 1111 原码
0000 0000 0000 0000 0000 0000 1111 1111 反码
0000 0000 0000 0000 0000 0000 1111 1111 补码 [计算机中存储格式]
---------------------------------------------------------------------------------------------------------------------
这个时候,计算机用 char 的眼光 【1个房间 8位】 来看这个 1111 1111 【负数由补码求原码】
补码:1 111 1111
中间:1 111 1110 减1 //先减去1
原码:1 000 0001 取反 // 符号位不变,取反,得到所谓的原码
所以结果为 -1
结论:不管怎么去存,只管怎么去读。
1111 1111 用 int 的视角去翻译,它就是 255;用 char 的视角去翻译,它就是 -1