先总结:整形比较小于int的会扩宽的int再比较, 而有符号数扩宽填充符号位, 无符号数填充0,
1.无符号数扩充
#includeint main(void){ unsigned char a=0xe0; signed int b=a; printf("%u\n",b); printf("%x\n",b);}
224e0
解析:因为a为无符号数,所以填充0,则在内存中b会变为
000000e0
2.有符号数扩充
#includeint main(void){ signed char a=0xe0; signed int b=a; printf("%u\n",b); printf("%x\n",b);}
运行结果为
4294967264ffffffe0
解析:因为此时a为符号数,所以填充符号数,因为e0二进制表示为1110 0000,所以填充1,则b在内存表示为
ffffffe0
最后再强调一点,上述结果与b是否为有符号无关。