Язык программирования Форт



         

Операции с битами - часть 2


Теперь представим себе, что вы хотите снова изменить значение разряда 0 в 1. Слово AND не сможет этого сделать. Вместо него мы используем слово OR (ИЛИ). Оно также производит поразрядное сравнение двух чисел, но. если хотя бы один из разрядов установлен в " 1", то в результате тоже будет "1". Попробуем установить в "1" третий разряд в последнем примере. Для этого случая мы используем маску 00000100:

10011011 00000100 OR U.

что приводит к

10011111 Ok

т.е. к исходному числу.

Третье полезное слово XOR (исключающее ИЛИ) также производит поразрядное сравнение. Если два разряда различны, то в бите результата устанавливается "1", если одинаковы, -- то "0". Пусть вы хотите изменить значения всех разрядов числа на противоположные, т.е., например, преобразовать число 10011011 в 01100100. Попробуйте сделать так :

10011011 11111111 XOR U.

и получите

01100100 ok

Так как в маске все разряды были установлены в "1", то там, где в исходном числе была 1, в результате стал 0, а если был 0 -- стала 1.

Есть еще одно слово, NOT (HE), которое в различных версиях языка определено не очень четко. В большинстве версий, в том числе в Форт-79, слово NOT не изменяет значение битов, оно делает нечто иное, о чем мы расскажем в одной из следующих глав. Однако в Форт-83 слово NOT изменяет значение разрядов на противоположное. Таким образом,

00000000101010 NOT U.

приведет к результату

11111111010101 ok

Операция NOT не эквивалентна вычитанию каждого разряда из двоичной единицы. Сможете ли вы определить на Форт-83 слово NOT, используя XOR ? Слова AND, OR, XOR и NOT имеют и другие применения, с которыми мы познакомимся в упражнениях.




Содержание  Назад  Вперед