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

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

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

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

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

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

相关推荐
冬天豆腐2 分钟前
Springcloud,Nacos管理,打jar包后,启动报错
java·spring cloud·maven·jar
2401_874732539 分钟前
泛型编程与STL设计思想
开发语言·c++·算法
BigDark的笔记16 分钟前
【ARM汇编】0x01_ARM和C混合编程实现基本运算
c语言·汇编·arm开发
今儿敲了吗19 分钟前
44| 汉诺塔问题
数据结构·c++·笔记·学习·算法·深度优先
redgxp19 分钟前
SpringBoot3整合FastJSON2如何配置configureMessageConverters
java
yuyuzururu22 分钟前
进程通信实验报告
c++
空空kkk23 分钟前
Java集合——List
java
telllong23 分钟前
C++20 Modules:从入门到真香
java·前端·c++20
程序员小崔日记34 分钟前
一道基础计算题卡在 40 分,求助判题规则问题
java·算法·竞赛
是Yu欸35 分钟前
LangGraph 智能体状态管理与决策
java·javascript·数据库