Результат побитового И кажется 0, но не - PullRequest
0 голосов
/ 04 февраля 2019

У меня следующая ситуация:

#include <stdio.h>

int main(void) {
  int first = 0x08;

  printf("%d\n", first & 0b10);
  printf("%d\n", first & 0b10 == 0);

  if (first & 0b10 == 0) {
    printf("SET");
  } else {
    printf("NOT");
  }

  return 0;
}

Две распечатки 0 с, затем NOT.Что здесь происходит?Кажется, что first & 0b01 равно нулю, поэтому должно пройти условие.

Ответы [ 3 ]

0 голосов
/ 04 февраля 2019

Это называется приоритет оператора .

first & 0b10 == 0

Сначала оценено:

0b10 == 0  // which is false ==> 0

Затем

first & 0  // which is also 0

Чтобы получить результатвы ожидаете использовать круглые скобки для определения порядка вычисления:

(first & 0b10) == 0  // this will true ==> 1
0 голосов
/ 04 февраля 2019

потому что == имеет более высокий приоритет, чем &.

Вот ссылка: Приоритет оператора

0 голосов
/ 04 февраля 2019

Это проблема приоритета оператора.

Побитовый оператор AND & имеет меньший приоритет, чем оператор равенства ==.Итак, это:

first & 0b10 == 0

То же самое, что и:

first & (0b10 == 0)

Это не то, что вы хотите.Он сравнивает 0b10 на равенство с 0, что неверно.Затем оценивается first & 0, что равно 0.

Добавьте скобки, чтобы получить желаемое поведение:

(first & 0b10) == 0
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...