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

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

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

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

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

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

相关推荐
王桑.几秒前
WebSocket---一种用于实时传输的网络协议
java·websocket·spring·java-ee
帝吃藕和1 分钟前
类加载和对象创建的执行顺序+例子
java·java笔试
CoderYanger5 分钟前
递归、搜索与回溯-综合练习:28.不同路径Ⅲ
java·算法·leetcode·深度优先·1024程序员节
鱼丸花生5 分钟前
Java 数组详解
java
用户84913717547166 分钟前
Tomcat 为什么要“造反”?深度解析 Java 类加载机制的“守”与“破”
java·jvm
可峰科技7 分钟前
Apriltag_ros CMakeList.txt一句话导致其他包编译失败
c++
code bean7 分钟前
【C++ 】C++ 与 C#:using 关键字、命名空间及作用域解析符对比
开发语言·c++·c#
CAE虚拟与现实8 分钟前
C# 调用 DLL为什么不像 C/C++调用 DLL 时需要lib库
开发语言·c++·c#·动态链接库·dll库·lib库
Larry_Yanan9 分钟前
Qt线程使用(一)直接继承QThread类
开发语言·c++·qt·ui
jiayong2312 分钟前
Elasticsearch Java 开发完全指南
java·大数据·elasticsearch