打印
[ZLG-ARM]

Keil MDKARM 编译问题求教!

[复制链接]
3176|3
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
wickman.wu|  楼主 | 2007-11-22 16:15 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
在Keil MDKARM中
unsigned int value2=0x80000000;
unsigned int value4=2147483648;
value2编译时不产生警告,而value4就产生警告
main.c(17): warning:  #1134-D: literal treated as "long long"
请问这是为什么?

相关帖子

沙发
lenglx| | 2007-11-22 18:11 | 只看该作者

这难道不正常嘛?

unsigned int value4=2147483648;

关键是2147483648是一个字面常量,类型是int型,而不是unsigned int.
上面这个语句,需要先将int类型,转换成unsigned int类型,再赋值给value4;
在转换过程中,因为这个数值超过32位int类型的表示范围,所以会出现你所见到的那个警告.

unsigned int value2=0x80000000;
0x80000000;字面类型是unsigned的,所以在32位的表示范围之内.

如果你想要明白告诉编译器,2147483648就是unsigned 类型,你可以这么做.
unsigned int value4=2147483648u;

使用特权

评论回复
板凳
wickman.wu|  楼主 | 2007-11-23 10:41 | 只看该作者

非常感谢!

虽然已经知道原因,但还是要感谢lenglx的详细解释!

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

9

主题

22

帖子

1

粉丝