您的位置:首页 > 其它

一道关于位数扩充的题目

2015-03-23 14:46 295 查看
先总结:整形比较小于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是否为有符号无关。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: