"Использование знакового целочисленного операнда с двоичным побитовым оператором" - при использовании короткого замыкания без знака
В следующем фрагменте кода C, который проверяет, установлены ли первые два бита 16-разрядной последовательности:
bool is_pointer(unsigned short int sequence) {
return (sequence >> 14) == 3;
}
CLion Clang-Tidy дает мне предупреждение "Использование знакового целочисленного операнда с двоичным побитовым оператором", и я не могу понять, почему. Является ли unsigned short
недостаточно неподписанным?
Ответы
Ответ 1
Код для этой проверки, кажется, заботится, если какой-либо операнд для побитового оператора подписан. Это не sequence
вызывающая предупреждение, а 14
, и вы можете смягчить проблему, сделав 14
без знака, добавив в конце букву " u
.
(sequence >> 14u)
Ответ 2
Я думаю, что целая реклама вызывает здесь предупреждение. Операнды, меньшие, чем int, расширяются до целого числа для арифметического выражения, которое подписано. Таким образом, ваш код эффективно return ( (int)sequence >> 14)==3;
что привело к предупреждению. Попробуйте return ( (unsigned)sequence >> 14)==3;
или return (sequence & 0xC000)==0xC000;
,