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

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

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

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

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

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

相关推荐
华仔啊4 小时前
SpringBoot 中 6 种数据脱敏方案,第 5 种太强了,支持深度递归!
java·后端
乔宕一4 小时前
stm32 链接脚本没有 .gcc_except_table 段也能支持 C++ 异常
c++·stm32·嵌入式硬件
SuperCandyXu5 小时前
P3205 [HNOI2010] 合唱队-普及+/提高
c++·算法·洛谷
_OP_CHEN5 小时前
数据结构(C语言篇):(十二)实现顺序结构二叉树——堆
c语言·数据结构·算法·二叉树·学习笔记··顺序结构二叉树
_君落羽_5 小时前
ARM寄存器以及异常处理
c++
异常驯兽师5 小时前
Spring 中处理 HTTP 请求参数注解全解析
java·spring·http
free5 小时前
基于librdkafa C++客户端生产者发送数据失败问题处理#2
c++·kafka
连合机器人5 小时前
晨曦中的守望者:当科技为景区赋予温度
java·前端·科技
杨福瑞5 小时前
C语⾔内存函数
c语言·开发语言
AD钙奶-lalala6 小时前
idea新建的项目new 没有java class选项
java·ide·intellij-idea