main() {unsigned char uch=0xff; //数值为255 char ch=0xff; //数值为-1int i=0; i=i+uch;printf("%x\n",i);i=0;i=i+ch;printf("%x\n",i);}
运行结果为:
ff
ffffffff
解释:C语言将低字节类型转化高字节类型时,转化会保证转化前后所对应的数值不变,而不是保证转化后的低字节的各个比特位与之前相同、高字节为0。
为什么两者不能同时保证,那是因为计算机存储的是补码。而当要转换的是8位无符号类型时,它的补码就是原码,所以转化之后不会对高字节产生影响。