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

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

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

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

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

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

相关推荐
fpcc5 分钟前
C++23中的模块应用说明之五综合应用和重点分
c++·c++23
云上凯歌6 分钟前
01 GB28181协议基础理解
java·开发语言
Coder_Boy_30 分钟前
基于SpringAI的在线考试系统-考试系统DDD(领域驱动设计)实现步骤详解
java·数据库·人工智能·spring boot
毕设源码-钟学长32 分钟前
【开题答辩全过程】以 基于Java的运动器材销售网站为例,包含答辩的问题和答案
java·开发语言
小乔的编程内容分享站33 分钟前
C语言指针相关笔记
c语言·笔记
workflower44 分钟前
软件需求规约的质量属性
java·开发语言·数据库·测试用例·需求分析·结对编程
xiaoye-duck1 小时前
吃透C++类和对象(下):内部类、匿名对象及编译器优化的深度解析
c++
TracyCoder1231 小时前
Java String:从内存模型到不可变设计
java·算法·string
想用offer打牌1 小时前
Spring AI Alibaba与 Agent Scope到底选哪个?
java·人工智能·spring
情缘晓梦.1 小时前
C++ 内存管理
开发语言·jvm·c++