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

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

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

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

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

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

相关推荐
无限进步_6 分钟前
从零实现一个迷你Shell——深入理解Linux命令行解释器
linux·运维·服务器·开发语言·c++·chrome
devilnumber16 分钟前
静态代理 & 动态代理:实战运用 + 场景区别 + 怎么选
java·开发语言·代理模式
Upsy-Daisy22 分钟前
Hermes Agent 学习笔记 02:安装、配置与第一次运行
java·前端·数据库
fpcc25 分钟前
工具使用——CMake中的函数和宏
c++·cmake
用户46825574591333 分钟前
Testcontainers 在 Windows Docker Desktop 上跑不通:协议层不兼容 + 4 种可行环境
java·后端
J2虾虾1 小时前
C语言 typedef 用法
c语言·数据结构·算法
程序员小羊!1 小时前
12.Java 多线程编程
java·开发语言
xuhaoyu_cpp_java1 小时前
项目学习(三)代码生成器
java·经验分享·笔记·学习
乐观勇敢坚强的老彭1 小时前
C++信息学奥赛lesson1
java·开发语言·c++
San813_LDD1 小时前
[深度学习] 数据序列化格式对比:以日志级别配置为例
xml·java·前端