«Использование целочисленного операнда со знаком с двоичным побитовым оператором» - при использовании беззнакового короткого - PullRequest
0 голосов
/ 17 мая 2018

В следующем фрагменте C, который проверяет, установлены ли первые два бита 16-битной последовательности:

bool is_pointer(unsigned short int sequence) {
  return (sequence >> 14) == 3;
}

Clang-Tidy из CLion выдает мне предупреждение «Использование целочисленного операнда со знаком с двоичным битовым оператором», и я не могу понять, почему. unsigned short недостаточно подписано?

Ответы [ 2 ]

0 голосов
/ 17 мая 2018

Я думаю, что целочисленное продвижение вызывает здесь предупреждение.Операнды, меньшие, чем int, расширяются до целого числа для арифметического выражения, которое подписано.Таким образом, ваш код фактически return ( (int)sequence >> 14)==3;, что приводит к предупреждению.Попробуйте return ( (unsigned)sequence >> 14)==3; или return (sequence & 0xC000)==0xC000;.

0 голосов
/ 17 мая 2018

Код для этой проверки , кажется, заботится, если либо операнд для побитового оператора подписан.Это не sequence, вызывающее предупреждение, но 14, и вы можете решить проблему, сделав 14 без знака, добавив u в конец.

(sequence >> 14u)
...