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

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

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

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

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

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

相关推荐
进击的荆棘几秒前
优选算法——队列+宽搜
数据结构·c++·算法·leetcode·bfs·队列
Irissgwe1 分钟前
STL简介
c++·stl
江屿风4 分钟前
C++OJ题经验总结(竞赛)4
开发语言·c++·笔记·算法·dp·双指针
码上有光4 分钟前
c++: 继承(下)
android·java·c++·多继承·菱形继承·虚继承
JAVA9655 分钟前
JAVA面试-并发篇 02-synchronized 锁可以重入吗
java·面试
RemainderTime10 分钟前
Spring Boot脚手架集成Sa-Token实现生产级RBAC权限管理
java·spring boot·后端·系统架构
进击的荆棘11 分钟前
优选算法——栈
数据结构·c++·算法·leetcode·
韦胖漫谈IT11 分钟前
选语言不是站队,是选适合问题的工具
java·python·ai·rust·go·技术落地
SWAGGY..13 分钟前
【C++初阶】:(11)list的功能介绍&&list迭代器模拟实现
开发语言·c++
lpd_lt15 分钟前
AI生成Spring Boot + Vue 3 + MySQL + MyBatis-Plus的项目实战
java·spring boot·vue·ai编程