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

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

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

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

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

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

相关推荐
铁皮哥8 分钟前
【力扣题解】LeetCode 25. K 个一组翻转链表
java·数据结构·windows·python·算法·leetcode·链表
小新同学^O^10 分钟前
简单学习 --> 单例模式
java·学习·多线程
Henray202414 分钟前
LRU缓存设计与实现
java·面试
Irissgwe17 分钟前
四、进程控制(进程创建与终止)
linux·c++·进程·系统编程·fork·进程创建·进程终止
代钦塔拉26 分钟前
第一篇:工业级 C++/Qt 项目头文件包含原则:告别循环依赖与编译玄学
开发语言·c++·qt
甲方大人请饶命38 分钟前
SSM-基础
java·数据库·spring
谷雨不太卷42 分钟前
Linux基础IO
java·开发语言
小新同学^O^1 小时前
简单学习 --> 文件IO
java·学习·文件io
Severus_black1 小时前
【初阶数据结构】C语言实现堆(Heap),巨详细!
c语言·数据结构
吴声子夜歌1 小时前
Java——Arrays
java·算法·排序算法