Побитовая операция для получения 1, если оба равны 0 - PullRequest
0 голосов
/ 10 января 2012

Мне нужно выполнить побитовую операцию (или серию), чтобы:

0 1 = 0
1 1 = 1
1 0 = 0

пока AND (&) работает нормально, но мне также нужно это

0 0 = 1

и здесь AND (&) не является правильным.

Я использую его в функции jquery grep, которая гласит:

jQuery.grep(json, function (e, index) {
            return (e.value & (onoff << 3)) != 0;
        });

где onoff может быть либо 1, либо 0, а e.value является представлением 4-битной строки (т.е. может быть "1001"). В приведенном выше примере я тестирую первый бит слева (<< 3). </p>

Можно ли это сделать с помощью серии AND, OR, XOR?

Ответы [ 2 ]

7 голосов
/ 10 января 2012

Это просто XNOR(a, b), что равно NOT(XOR(a, b)), т. Е. Исключающему ИЛИ с инвертированным выходом. В C и C-подобных языках это будет:

!(a ^ b)

или в вашем конкретном случае:

return !((e.value >> 3) ^ onoff);

Сказав это, вы можете просто проверить на равенство:

return (e.value >> 3) == onoff;
0 голосов
/ 10 января 2012

Это выглядит примерно как XOR, который имеет следующую таблицу результатов:

0 0 = 0
0 1 = 1
1 0 = 1
1 1 = 0

Теперь вы хотите иметь противоположное значение, то есть вы хотите 1, если оба входа имеют одинаковое значение. И это приводит нас к NOT XOR

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