当前位置: 首页 > news >正文

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位的操作,从而避免了警告。

相关文章:

  • 第五章重采样方法
  • 2024 年解锁 Android 手机的 7 种简便方法
  • AI音乐大模型时代:版权归属与创意产业的新生长点
  • Flask-OAuthlib
  • 6月27日云技术研讨会 | 中央集中架构新车型功能和网络测试解决方案
  • 2024年保安职业资格考试试题分享
  • 070304负反馈放大电路增益的一般表达式对放大电路的影响
  • python+unity手势控制地球大小
  • 【Linux】 yum学习
  • Android的自启动
  • 什么是微分和导数?
  • SpringCloud-OpenFeign基础
  • go的context总结
  • 汽车IVI中控开发入门及进阶(二十七):车载摄像头vehicle camera
  • 区块链2024
  • 技术干货|如何快速提升SNMP监控性能
  • 揭秘古代手术工具与技术:从中国起源的医疗奇迹
  • 板凳------56.Linux/Unix 系统编程手册(下) -- SOCKET 介绍
  • [C#] opencvsharp对Mat数据进行序列化或者反序列化以及格式化输出
  • Linux常用命令(17)—pastesortcomm命令(有相关截图)
  • 协会:坚决支持司法机关依法打击涉象棋行业的违法行为
  • 重庆党政代表团在沪考察,陈吉宁龚正与袁家军胡衡华共商两地深化合作工作
  • “20后”比“60后”更容易遭遇极端气候事件
  • 安徽六安原市长潘东旭,已任省市场监督管理局党组书记、局长
  • 马上评|从一个细节看今年五一档电影
  • 虚构医药服务项目、协助冒名就医等,北京4家医疗机构被处罚