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

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

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

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

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

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

相关推荐
Carsene17 小时前
开篇:我们距离理想的 Java SQL DSL 还有多远?
java·sql
敖正炀17 小时前
集合-List-LinkedList
java
AI人工智能+电脑小能手17 小时前
【大白话说Java面试题】【Java基础篇】第9题:HashMap根据key查询元素的时间复杂度是多少
java·开发语言·数据结构·后端·面试·哈希算法·哈希表
不知名的老吴17 小时前
编程初体验之句柄的概念及使用示例
c++
invicinble17 小时前
对于java面向对象的知识
java·开发语言
木子墨51617 小时前
LeetCode 热题 100 精讲 | 矩阵与图论进阶篇:矩阵置零 · 螺旋矩阵 · 旋转图像 · 搜索二维矩阵 II · 岛屿数量 · 腐烂的橘子
c++·算法·leetcode·矩阵·力扣·图论
铭彩色17 小时前
refresh token(保证access token获取及用户安全)
java·安全
stolentime17 小时前
线段树套?——洛谷P7312 [COCI 2018/2019 #2] Sunčanje题解
c++·算法·图论·洛谷
2501_9130613417 小时前
网络原理知识(6)
java·网络·网络协议·面试
invicinble17 小时前
java面向对象的学习主线
java·开发语言·学习