我知道必须只使用无符号整数进行按位运算,静态分析器就此警告我。
#define按位宏标志的好习惯是什么?到目前为止我看到了这两种方式:
#define MACRO_FLAG1 (1U << 0U)
#define MACRO_FLAG2 (unsigned int)(1 << 1)
第一个宏用无符号整数表示移位,结果本身是无符号的。
第二个使用有符号整数进行移位,然后转换签名结果。它受到你提到的同样的弱点的影响。
值得注意的是,静态分析仪会警告您可能出现的问题。根据您的标志范围,即使使用有符号整数,也可能永远不会遇到所述问题。