计算机中所有的数据是以二进制形式存在的,而计算机中的二进制又是以补码的形式存在的。(为了实现-*/这些运算)。
所以:char c = 255;
得到的结果为-1,
而int i = 255;
得到的结果为 255。
#include <stdio.h>
int main(int argc, char const *argv[])
{
char c = 255;
// 11111111
int i = 255;
// 00000000 00000000 00000000 11111111
printf("c=%d\n",c );
printf("i=%d\n",i );
// 由于计算机中的二级制数据是以补码形式存在的,而 char 是1个字节(8bit),int 是4个字节(32bit)。
// 所以 char c =255, 刚好是 -1 的补码,于是结果是-1 , int i = 255 , 只是低八位为1,高位全部为0,也就是正数(正数的补码也就是正数本身),于是结果为255.
printf("sizeof(int)=%ld\n", sizeof(int));
return 0;
}
/*
console:
c=-1
i=255
sizeof(int)=4
*/