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

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

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

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

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

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

相关推荐
灰小猿5 分钟前
Spring前后端分离项目时间格式转换问题全局配置解决
java·前端·后端·spring·spring cloud
下午见。17 分钟前
C语言结构体入门:定义、访问与传参全解析
c语言·笔记·学习
算法与编程之美29 分钟前
理解Java finalize函数
java·开发语言·jvm·算法
怕什么真理无穷36 分钟前
C++面试4-线程同步
java·c++·面试
lkbhua莱克瓦2438 分钟前
Java基础——常用算法5
java·开发语言·笔记·github
cs麦子1 小时前
C语言--函数(function)
c语言·开发语言
牢七1 小时前
javan小案例。
java
极智-9961 小时前
C语言编译器?【图文详解】Visual Studio安装配置编译运行C语言?C语言编译器下载安装?
c语言·visual studio·c语言编译器·c代码运行·visual studio下载·c编程·c语言下载
是苏浙1 小时前
零基础入门C语言之C语言实现数据结构之顺序表
c语言·开发语言·数据结构
星释1 小时前
Rust 练习册 :Luhn与校验算法
java·算法·rust