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

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

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

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

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

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

相关推荐
野生技术架构师几秒前
【面试题】为什么 Java 8 移除了永久代(PermGen)并引入了元空间(Metaspace)?
java·开发语言
Leo July几秒前
【Java】Java设计模式实战指南:从原理到框架应用
java·开发语言·设计模式
Anastasiozzzz4 分钟前
力扣hot100 20.有效的括号 解析
java·算法·面试·力扣
brave_zhao8 分钟前
如何解决 Spoon 与 Carte 互联的 UTF-8 编码问题
java
老歌老听老掉牙16 分钟前
16宫格属性分析系统:打造专业级科学数据可视化工具
c++·qt·可视化
重生之我是Java开发战士17 分钟前
【数据结构】Map、Set与哈希表底层原理
java·数据结构·散列表
嵌入式小能手18 分钟前
飞凌嵌入式ElfBoard-系统信息与资源之休眠
c语言·开发语言·算法
橘子师兄19 分钟前
C++AI大模型接入SDK—API接入大模型思路
开发语言·数据结构·c++·人工智能
L.EscaRC24 分钟前
深度解析 Spring 框架核心代理组件 MethodProxy.java
java·开发语言·spring
拽着尾巴的鱼儿27 分钟前
Spring 缓存 @Cacheable 实现原理
java·spring·缓存