【C/C++】宏定义标志位使用到 (1U<<0)是为什么?

最近开发过程中,遇到一些不同平台的编译器问题

宏定义标志位使用到 (1U<<0)就是出于为了应对不同的编译器。

也就是说:1U<<0 与 1<<0 有什么区别? 答案是:移植性更强。

在实际开发中,不同的编译器都将会把有符号的左移视为无符号左移,会出现问题。

而且,若外部变量 int Count = 0 , 是未签名的,若将其与已签名的 1 << 0 进行比较,则会出现编译器告警,会丢失精准度,甚至报错,显然,我们使用 1U<<0,则会消除这样的隐患,而且也不用担心左移 31或 63位会发生什么问题。

相关推荐
逻辑驱动的ken1 分钟前
Java高频面试考点场景题22
java·开发语言·jvm·面试·职场和发展·求职招聘·春招
小则又沐风a7 分钟前
list模拟实现
java·服务器·list
上弦月-编程10 分钟前
C语言链表详解,新手也能看懂! ——从入门到精通的完整教程
java·c语言·c++
ffqws_23 分钟前
Spring Boot 配置读取全解析:从 application.yml 到 Java 对象的完整链路
java·数据库·spring boot
clear sky .24 分钟前
【TCP】TCP数据粘包/分包问题
java·服务器·网络
孬甭_25 分钟前
文件操作详解
c语言
云烟成雨TD25 分钟前
Spring AI 1.x 系列【29】Embedding Model(嵌入模型)
java·人工智能·spring
CSCN新手听安29 分钟前
【Qt】Qt窗口(五)QDialog对话框的使用,点击按钮弹出新的对话框,自定义对话框界面,模态对话框model
开发语言·c++·qt
晴夏。32 分钟前
c++调用lua的方法
c++·游戏引擎·lua·ue
幸福巡礼35 分钟前
【 LangChain 1.2 实战(四)】构建一个模块化的天气查询 Agent
java·前端·langchain