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