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

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

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

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

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

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

相关推荐
浮游本尊7 小时前
Java学习第31天 - 高级主题与深度实战
java
BD_Marathon7 小时前
【JavaWeb】IDEA关联Tomcat并使用Tomcat运行JavaWeb项目
java·tomcat·intellij-idea
柒.梧.7 小时前
手写Tomcat的实现代码分享
java·tomcat
y1y1z7 小时前
Spring MVC教程
java·spring·mvc
北慕阳7 小时前
背诵-----------------------------
java·服务器·前端
say_fall7 小时前
C语言编程实战:每日一题:用栈实现队列
c语言·开发语言
天赐学c语言7 小时前
12.11 - 最长回文子串 && main函数是如何开始的
c++·算法·leetcode
没有bug.的程序员7 小时前
AOT 与 GraalVM Native Image 深度解析
java·jvm·测试工具·aot·gc·gc调优·graalvm native
deng-c-f7 小时前
C/C++内置库函数(4):c++左右值及引用的概念、move/forward的使用
c语言·开发语言·c++
零雲7 小时前
java面试:怎么保证消息队列当中的消息丢失、重复问题?
java·开发语言·面试