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