#define无符号按位宏标志的良好做法

时间:2018-03-05 15:00:52

标签: c bit-manipulation

我知道必须只使用无符号整数进行按位运算,静态分析器就此警告我。

#define按位宏标志的好习惯是什么? 到目前为止我看到了这两种方式:

#define MACRO_FLAG1 (1U << 0U)
#define MACRO_FLAG2 (unsigned int)(1 << 1)

1 个答案:

答案 0 :(得分:2)

第一个宏用无符号整数表示移位,结果本身是无符号的。

第二个使用有符号整数进行移位,然后转换签名结果。这与你提到的相同的弱点有关。

值得注意的是,静态分析器会警告您可能的问题。根据您的标志范围,即使使用有符号整数,也可能永远不会遇到所述问题。

相关问题