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

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

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

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

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

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

相关推荐
_阿伟_13 小时前
信息检索简单介绍
java
下次再写13 小时前
深入浅出微服务架构:从理论到Spring Boot实战
java·微服务·springboot·springcloud·架构设计·后端开发·分布式系统
djarmy13 小时前
C 标准库 `<stdio.h>` 完整函数清单(官方标准 + 常用全部函数)
c语言·c++·算法
code_whiter13 小时前
C++10(list)
c++·windows·list
进阶的猿猴13 小时前
Rsa简单实现接口到期限制(springBoot)
java·spring boot·后端
雨落在了我的手上13 小时前
初识java(二):数据类型与变量
java·开发语言
小闫BI设源码13 小时前
当20个节点选出两个Master时:Elasticsearch的致命故障与解决方案
java·elasticsearch·jenkins·php·面试宝典·深入解析
2301_8152795213 小时前
实战分享实现 C++ 管理类单例模式:特点与最佳实践
javascript·c++·单例模式
SamDeepThinking13 小时前
千万级用户购物车系统的架构设计
java·后端·架构
liwulin050613 小时前
【JAVAFX】从ORACLE JDK切换到国内的JDK以便使用JAVAFX功能
java·数据库·oracle