在Keil MDKARM中
unsigned int value2=0x80000000;
unsigned int value4=2147483648;
value2编译时不产生警告,而value4就产生警告
main.c(17): warning: #1134-D: literal treated as "long long"
解决方法:
关键是2147483648是一个字面常量,类型是int型,而不是unsigned int.
上面这个语句,需要先将int类型,转换成unsigned int类型,再赋值给value4;
在转换过程中,因为这个数值超过32位int类型的表示范围,所以会出现你所见到的那个警告.
unsigned int value2=0x80000000;
0x80000000;字面类型是unsigned的,所以在32位的表示范围之内.
如果你想要明白告诉编译器,2147483648就是unsigned 类型,你可以这么做.
unsigned int value4=2147483648u;