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

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

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

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

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

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

相关推荐
学编程就要猛5 分钟前
算法:1.移动零
java·算法
YYDS3145 分钟前
次小生成树
c++·算法·深度优先·图论·lca最近公共祖先·次小生成树
xu_yule8 分钟前
算法基础(区间DP)
数据结构·c++·算法·动态规划·区间dp
biter down11 分钟前
C++ 交换排序算法:从基础冒泡到高效快排
c++·算法·排序算法
开开心心_Every16 分钟前
优化C盘存储:自定义软件文档保存路径工具
java·网络·数据库·typescript·word·asp.net·excel
多则惑少则明16 分钟前
AI大模型实用(八)Java快速实现智能体整理(使用LangChain4j-agentic来进行情感分析/分类)
java·人工智能·spring ai·langchain4j
落羽的落羽19 分钟前
【C++】深入浅出“图”——图的遍历与最小生成树算法
linux·服务器·c++·人工智能·算法·机器学习·深度优先
qq_3771123719 分钟前
JAVA的平凡之路——此峰乃是最高峰JVM-GC垃圾回收器(2)-06
java·开发语言·jvm
用户21903265273523 分钟前
别再到处try-catch了!SpringBoot全局异常处理这样设计
java·spring boot·后端
李少兄25 分钟前
深入理解 Java Web 开发中的 HttpServletRequest 与 HttpServletResponse
java·开发语言·前端