int main(void)
{
signed short A = -10;
printf("~A = %u\n", ~A);
char c = 128;
printf("c=%d\n",c);
return 0;
}
通过这个简单的测试,发现自己对类型转换的规则的细节需要做一个分析,以明确转化时的规则。
1.char转为为int类型,即有符号signed char转换为signed int: char类型占1字节内存大小,int类型占4字节,所以char转为int,在int类型变量高位前3个字节要填充,填充位的二进制为char类型最高位的比特,如 char a=0x11;// 0001 0001(1字节) int b=a;//前3字节补0 转化后b的十六进制为0x00000011 char a=0x81;// 1000 0001 int b=a;//前三个字节补1 转化后b的十六进制为0xffffff81
2.unsigned char转为int又是不同的, unsigned char a=0xf1;//或a=0x11;(最高位是1或0的差别) int b=a; printf("%x\n",b); 这里无论无符号char类型变量的最高比特是0或1,转为有符号int类型时,int前面高三位字节都是补0
转载请注明原文地址: https://ju.6miu.com/read-673180.html