Битовая маска для переворачивания битов ... без XOR? - PullRequest
0 голосов
/ 29 мая 2011

Довольно просто, правда.Я хочу отрицать целое число, которое представлено в дополнении 2, и для этого мне нужно сначала перевернуть все биты в байте.Я знаю, что это просто с XOR - просто используйте XOR с битовой маской 11111111. А как же без XOR?(т.е. просто И и ИЛИ).О, и на этом дерьмовом ассемблере, который я использую, НЕ существует.Так что там тоже нет костей.

Ответы [ 2 ]

4 голосов
/ 29 мая 2011

Вы не можете построить НЕ ворота из И и ИЛИ ворот.

Как меня попросили объяснить, здесь это красиво отформатировано. Допустим, у вас есть любое количество ворот AND и OR. Ваши входы A, 0 и 1. У вас есть шесть возможностей, так как вы можете сделать три пары из трех сигналов (выбрать один, который пропущен) и два гейта. Сейчас:

Operation  Result
A AND A    A
A AND 1    A
A AND 0    0
A OR A     A
A OR 1     1
A OR 0     A

Таким образом, после того, как вы подали любой из ваших сигналов в первый вентиль, ваш новый набор сигналов по-прежнему будет просто A, 0 и 1. Поэтому любая комбинация этих ворот и сигналов даст вам только A, 0 и 1. Если ваш конечный результат равен A, тогда это означает, что для обоих значений A он не будет равен! A, если ваш конечный результат равен 0, тогда A = 0 - это такое значение, что ваше конечное значение не равно! A для 1.

Редактировать: этот монотонный комментарий тоже правильный! Позвольте мне повторить здесь: если вы измените любой из входов AND / OR с 0 на 1, то выход не уменьшится. Поэтому, если вы заявляете, что строите НЕ, то я изменю ваш вход с 0 на 1, ваш выход также не может уменьшиться, но должен - это противоречие.

0 голосов
/ 29 мая 2011

(foo & ~bar) | (~foo & bar) делает трюк?

Редактировать: О, НЕ существует.Не видел эту часть!

...