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

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

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

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

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

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

相关推荐
2201_7578308712 小时前
Stream的终结方法
java·服务器·前端
今天没ID12 小时前
Java 数组进阶操作
java
卷到起飞的数分12 小时前
5.MyBatis持久(dao)层框架
java·数据库·mybatis
XUN4J12 小时前
Java没有指针,那它是怎么干C语言里指针干的活的?
java
d***93512 小时前
【Spring】Cookie和Session是什么
java·后端·spring
月夜的风吹雨12 小时前
【 C++哈希容器】:unordered_map与unordered_set深度解析
c++·哈希算法·unordered_map·unordered_set
蜂蜜黄油呀土豆12 小时前
深入理解 Java Stream:从创建到过滤、归约、分组与聚合(带大量实战代码)
java·实战·stream流·api
一只叫煤球的猫12 小时前
从 JDK1.2 到 JDK21:ThreadLocal的进化解决了什么问题
java·后端·面试
天马行空-12 小时前
ES 精准匹配 和 模糊查询的实现方式
java·开发语言
Z***258013 小时前
Java计算机视觉
java·开发语言·计算机视觉