【发布时间】:2018-03-05 15:00:51
【问题描述】:
我知道按位运算只能对无符号整数进行,静态分析器会警告我这一点。
#define 位宏标志的最佳做法是什么? 到目前为止,我看到了这两种方式:
#define MACRO_FLAG1 (1U << 0U)
#define MACRO_FLAG2 (unsigned int)(1 << 1)
【问题讨论】:
-
正如 StoryTeller 在他的回答中所说,第一个更好。但是你不需要强制移位量是无符号的,所以
(1U << 0)非常好。移位运算符右侧参数的类型无关紧要 - 它只需要是整数类型即可。 -
是的,我也认为
(1U << 0)很好,但似乎clang-tidy 的hicpp-signed-bitwise 在我输入0U 之前不会静音。 -
the second one suffers from UB 如果值转移到符号位,第一个简单地换行丢弃高位
标签: c bit-manipulation