|
ad.c(261): warning: #61-D: integer operation result is out of range volatile uint32_t temp0 = 0x0000FFFF << 16; ad.c(261): warning: #68-D: integer conversion resulted in a change of sign volatile uint32_t temp0 = 0x0000FFFF << 16; 有啥需要注意的的么? |
微信公众号
手机版
volatile uint32_t temp0 = (uint32_t)0x0000FFFF << 16;
评分
查看全部评分
volatile uint32_t temp0 = (uint32)0x0000FFFF << 16;
提示的原因很简单,就是你把数据写成0x0000FFFF这样,并不表示是32位数据,而实际可能是16位的数据;16位的数据,移位超过16,编译器给出警告是很正常的。当然了,写成0x0001FFFF这样,就是32位的数据了。。。所以最好使用的时候,前面加一个强制转换。。。
评分
查看全部评分
volatile uint32_t temp0 = 0x0000FFFFUL << 16;
这个UL后缀就告诉编译器这是无符号长整形
评分
查看全部评分
感谢楼上3位,不一一回复了,
我是想的既然定义了 uint32_t 为啥还给我发警告,忽略了立即数也得给个规范,谢谢!
虽然运行没有问题,但既然发出了警告,我怕出现莫名错误,已修改了实现方式,让它无警告,