“使用带符号的整数操作数和二进制位运算符” – 使用无符号短整型时
在下面的C片段中,检查是否设置了16位序列的前两位:
bool is_pointer(unsigned short int sequence) { return (sequence >> 14) == 3; }
CLion的Clang-Tidy给了我一个“使用有符号整数操作数和二进制位运算符”的警告,我无法理解为什么。 unsigned short
不是没有签名?
此检查的代码似乎关心按位运算符的任一操作数是否已签名。 我认为这不是导致警告的sequence
,而是14
并且通过使14
无符号来缓解问题
(sequence >> 14u)
我认为整数提升会导致警告。 小于int的操作数被扩展为整数,用于算术表达式,该表达式是有符号的。 所以你的代码是有效的return ( (int)sequence >> 14)==3;
这引起了警告。 尝试return ( (unsigned)sequence >> 14)==3;
或return (sequence & 0xC000)==0xC000;
。