先总结:整形比较小于int的会扩宽的int再比较, 而有符号数扩宽填充符号位, 无符号数填充0,

1.无符号数扩充

#include <stdio.h>
int main(void)
{
        unsigned char a=0xe0;
        signed int b=a;
        printf("%u\n",b);
        printf("%x\n",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\n",b);
        printf("%x\n",b);
}

运行结果为

4294967264
ffffffe0

解析:因为此时a为符号数,所以填充符号数,因为e0二进制表示为1110 0000,所以填充1,则b在内存表示为

ff
ff
ff
e0

 

最后再强调一点,上述结果与b是否为有符号无关。

 程序猿必读

posted on 2015-03-23 14:46  龙种人  阅读(228)  评论(0编辑  收藏  举报