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

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

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

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

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

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

相关推荐
小麦嵌入式24 分钟前
Linux驱动开发实战(十一):GPIO子系统深度解析与RGB LED驱动实践
linux·c语言·驱动开发·stm32·嵌入式硬件·物联网·ubuntu
腥臭腐朽的日子熠熠生辉33 分钟前
解决maven失效问题(现象:maven中只有jdk的工具包,没有springboot的包)
java·spring boot·maven
ejinxian35 分钟前
Spring AI Alibaba 快速开发生成式 Java AI 应用
java·人工智能·spring
杉之40 分钟前
SpringBlade 数据库字段的自动填充
java·笔记·学习·spring·tomcat
云 无 心 以 出 岫1 小时前
贪心算法QwQ
数据结构·c++·算法·贪心算法
圈圈编码1 小时前
Spring Task 定时任务
java·前端·spring
俏布斯1 小时前
算法日常记录
java·算法·leetcode
27669582921 小时前
美团民宿 mtgsig 小程序 mtgsig1.2 分析
java·python·小程序·美团·mtgsig·mtgsig1.2·美团民宿
爱的叹息1 小时前
Java 连接 Redis 的驱动(Jedis、Lettuce、Redisson、Spring Data Redis)分类及对比
java·redis·spring
jelasin1 小时前
LibCoroutine开发手记:细粒度C语言协程库
c语言