CLion Сообщение «Выражение может быть упрощено» при битовой операции - PullRequest
0 голосов
/ 06 июня 2018

Я работал над проектом C и написал следующую строку, чтобы проверить, является ли самый значимый бит int8_t равным 1:

if (f & 0b10000000 == 0b10000000) {

, и CLion выдал предупреждение, говорящее мне: «Выражение можетбыть упрощенным до "f! = 0" '

Буду ли я прав, говоря, что это неправильно?Я перечитываю побитовые операции, чтобы быть уверенным, и все еще чувствую, что это не эквивалентные операции, например, f = 1 вернул бы false с моим выражением, но это сообщение заставляет меня сомневаться в себе.

Спасибо за любую помощьВы можете дать!

1 Ответ

0 голосов
/ 06 июня 2018

Битовый оператор "и" & имеет более низкий приоритет, чем ==.

Следовательно, ваше выражение if (f & 0b10000000 == 0b10000000) эквивалентно if (f & (0b10000000 == 0b10000000)).

Если вы просто хотитечтобы проверить бит 7, попробуйте if (f & 0b10000000).Любое ненулевое значение будет рассматриваться как «истина».

Кроме того, да: CLion неверен.Ваше оригинальное выражение эквивалентно if (f & 1), который проверяет бит 0 (вероятно, не то, что вы хотели).

...