“使用带符号的整数操作数和二进制位运算符” – 使用无符号短整型时

在下面的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;