c语言移位运算超出类型所能表示的范围告警

错误代码

*(unsigned int *)GPIOC_CRH &= ~(0xf << 28);

告警内容

integer operation result is out of range

分析

 integer operation result is out of range是因为在尝试对一个32位整型执行移位操作时超出了该类型所能表示的范围。在C语言中,整型字面量(如0xf)默认为int类型,其大小通常是32位(这可能根据编译器和平台有所不同,但在许多环境下是这样)。当您尝试将0xf左移28位时,整型字面量的范围仍然是32位,导致移位运算尝试创建一个超出32位整型表示范围的值。

为了解决这个问题,您可以通过显式地将字面量声明为unsigned int类型或更大的整数类型(如unsigned long),来确保移位操作不会超出数据类型能表示的范围。这可以通过在字面量后加上U(表示unsigned int)或UL(表示unsigned long)来实现。例如:

*(unsigned int *)GPIOC_CRH &= ~(0xfUL << 28);
*(unsigned int *)GPIOC_CRH &= ~((unsigned int)0xf << 28);

在这个修正后的代码中,0xfUL是一个unsigned long类型的字面量,能够正确处理向左移动28位的操作,从而避免了警告。

  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值