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

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

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

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

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

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

相关推荐
superman超哥2 分钟前
仓颉内存分配优化深度解析
c语言·开发语言·c++·python·仓颉
2401_841495645 分钟前
并行程序设计与实现
c++·python·算法·cuda·mpi·并行计算·openmp
invicinble5 分钟前
java集合类(二)--map
java·开发语言·python
Mr-Wanter12 分钟前
搭建局域网时间同步服务器
java·运维·服务器
代码笔耕12 分钟前
我们这样设计消息中心,解决了业务反复折腾的顽疾
java·后端·架构
chenyuhao202413 分钟前
Linux系统编程:多线程同步与单例模式
linux·服务器·c++·后端·单例模式
曼巴UE518 分钟前
UE C++ FName, FText 测试
服务器·c++·ue5
没有bug.的程序员23 分钟前
负载均衡的真正含义:从算法到架构的深度解析
java·jvm·算法·微服务·架构·负载均衡
yc_xym23 分钟前
[项目实践]言聚论坛(后端)
java·项目开发
多仔ヾ24 分钟前
Solon + EasyQuery + ElementPlus 实现后台管理系统之 08-权限认证优化
java