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

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

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

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

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

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

相关推荐
蜗牛love天空4 小时前
vs的运行库区别,静态连接mt和动态链接md运行库
c++
超级大福宝4 小时前
C++ 中 unordered_map 的 at() 和 []
数据结构·c++
蜗牛love天空4 小时前
智能指针的值传递和引用传递
开发语言·c++
有一个好名字4 小时前
设计模式-单例模式
java·单例模式·设计模式
2301_797312264 小时前
学习Java26天
java·开发语言
cike_y4 小时前
JSP原理详解
java·开发语言·jsp
invicinble4 小时前
关于springboot引入traceid来保障可观测型
java·spring boot·后端
仰泳的熊猫4 小时前
1037 Magic Coupon
数据结构·c++·算法·pat考试
爱装代码的小瓶子4 小时前
【cpp进阶】c++11的新特性(概述版)
开发语言·c++
精神病不行计算机不上班5 小时前
[Java Web]在IDEA中完整实现Servlet的示例
java·servlet·tomcat·html·intellij-idea·web