Использование побитового И более чем на два бита - PullRequest
2 голосов
/ 22 мая 2010

Я довольно новичок в побитовых операторах. Допустим, у меня есть 3 переменные a, b и c, с этими значениями в двоичном виде:

  a = 0001
  b = 0011
  c = 1011

Теперь я хочу выполнить побитовое И так:

    a
AND b
AND c
--------
d = 0001

d &= a &= b &= c не работает (как я ожидал), но как я могу это сделать? Спасибо

Ответы [ 4 ]

17 голосов
/ 22 мая 2010

Что не так только с этим.

d = a & b & c;
3 голосов
/ 22 мая 2010

Вы хотите:

d = a & b & c;

&= означает побитовое И, а также назначить.

Если бы d изначально было присвоено 0, то ваше выражение, как вы его выразили, всегда будет равно 0, потому что все & 0 будет равно 0.

1 голос
/ 22 мая 2010

это должно работать

int a = 1;  // 0001
int b = 3;  // 0011
int c = 11; // 1011
int d = 0;

d = a & b & c;
0 голосов
/ 22 мая 2010

Вы, вероятно, просто забыли инициализировать 'd', чтобы быть всеми 1, и он по умолчанию равен 0. Вы можете легко установить все биты в 1, назначив d = -1 или, если хотите, d = 0xffffffff, хотя, поскольку вы использовали только 4 бита, d = 0xF было бы достаточно.

При этом такие операторы с последовательным подключением имеют тенденцию быть менее читабельными, чем вспыхивать, как предлагали другие.

...