как вычислить использование битового "ИЛИ" И, XOR и сдвиг?

Вопрос кажется вполне прилично сформулированным

У меня есть виртуальная машина, которая реализует только И, XOR, SHL и SHR, все же я должен сделать "ИЛИ 0x01" операция.

5
задан Flavius 27 September 2012 в 08:58
поделиться

4 ответа

Прежде всего, достаточно иметь правильное побитовое вычисление для следующих двух переменных, поскольку они охватывают все комбинации:
A=0101
B=0011

Мы хотим
0101
0011
A или B
0111

для xor получаем

0101
0011
A xor B
0110

for и получаем

0101
0011
A и B
0001

поэтому если мы соединим их xor, то получим.

(A xor B) xor (A и B)

6
ответ дан 14 December 2019 в 01:06
поделиться

Я бы просто расширил закон ДеМоргана : A или B = нет (не A и не B) . Вы можете вычислить , а не , выполняя операцию XOR со всеми 1 битами.

0
ответ дан 14 December 2019 в 01:06
поделиться

Я бы просто начал с

a xor b = ((not a) and b) or (a and (not b))

и раскрыл бы эту логическую алгебру, пока это не станет похоже на

a or b = <expression using only and, xor>

По общему признанию, на самом деле это, вероятно, больше работы, чем идти путем «пробовать каждую мыслимую комбинацию битов», но тогда вы просил идеи решения домашней работы. :)

2
ответ дан 14 December 2019 в 01:06
поделиться

Таблица правды, обобщенная в Википедии здесь и, основные материалы CS 101, Закон де Моргана....

AND
0 & 0   0
0 & 1   0
1 & 0   0
1 & 1   1


OR
0 | 0   0
0 | 1   1
1 | 0   1
0 | 0   1


XOR
0 ^ 0   0
0 ^ 1   1
1 ^ 0   1
1 ^ 1   0

Сдвиг влево включает в себя смещение битов справа налево, предположим:

+-+-+-+-+-+-+-+-+
|7|6|5|4|3|2|1|0|
+-+-+-+-+-+-+-+-+
|0|0|0|0|0|1|0|0| = 0x4 hexadecimal or 4 decimal or 100 in binary
+-+-+-+-+-+-+-+-+

Shift Left by 2 places becomes
+-+-+-+-+-+-+-+-+
|7|6|5|4|3|2|1|0|
+-+-+-+-+-+-+-+-+
|0|0|0|1|0|0|0|0| = 0x10 hexadecimal or 16 decimal or 10000 in binary
+-+-+-+-+-+-+-+-+

Shift Right by 1 places becomes
+-+-+-+-+-+-+-+-+
|7|6|5|4|3|2|1|0|
+-+-+-+-+-+-+-+-+
|0|0|0|0|1|0|0|0| = 0x8 hexadecimal or 8 decimal or 1000 in binary
+-+-+-+-+-+-+-+-+

Тогда речь идет о комбинировании побитовых операций в соответствии с приведенной выше таблицей истинности...

1
ответ дан 14 December 2019 в 01:06
поделиться
Другие вопросы по тегам:

Похожие вопросы: