In the following C snippet that checks if the first two bits of a 16-bit sequence are set:
bool is_pointer(unsigned short int sequence) {
return (sequence >> 14) == 3;
}
CLion's Clang-Tidy is giving me a "Use of a signed integer operand with a binary bitwise operator" warning, and I can't understand why. Is unsigned short
not unsigned enough?
I think the integer promotion causes here the warning. Operands smaller than an int are widened to integer for the arithmetic expression, which is signed. So your code is effectively
return ( (int)sequence >> 14)==3;
which leds to the warning. Tryreturn ( (unsigned)sequence >> 14)==3;
orreturn (sequence & 0xC000)==0xC000;
.The code for this check seems to care if either operand to the bitwise operator is signed. It is not
sequence
causing the warning, but14
, and you can alleviate the problem by making14
unsigned by appending au
to the end.