Начальный курс программирования на языке Форт


Часть 2 ДЛЯ ВСЕХ ДВОИЧНАЯ ЛОГИКА


Слова AND и OR (введенные в гл. 4) используют «двоичную логику», т. е. каждый бит проверяется независимо, и перенос единицы в старший разряд не производится. Выполним, например, операцию AND над следующими двумя двоичными числами: 0000000011111111 0110010110100010 AND ---------------- 0000000010100010

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

Слово OR также применяет двоичную логику. В примере1000100100001001 0000001111001000 OR ---------------- 1000101111001001

единицу получается в тех битах, где хотя бы один операнд был равен единице. И снова каждый столбец проверяется независимо, без переноса единицы в старший разряд. При умелом использовании масок в одном 16-разрядном значении можно хранить 16 отдельных флагов. Так, мы можем узнать, чему равен соответствующий (скажем, пятый) бит: 1011101010011100 нулю или единице, путем маскирования остальных флагов: 1011101010011100

0000000000010000 AND ---------------- 0000000000010000

Так как значение нашего бита равно единице, результат будет истинным. Если бы значение бита составляло нуль, то результат

оказался бы ложным. Мы можем сбросить определенный флаг в нуль, не трогая остальные, следующим приемом: 1011101010011100 1111111111101111 AND

---------------- 1011101010001100 ^

Мы работали с маской, во всех битах которой, за исключением сбрасываемого в нуль, содержатся единицы. Можно установить тот же самый флаг, т. е. сделать его единицей, таким образом: 1011101010001100

0000000000010000 OR ---------------- 1011101010011100 ^

Ниже приводятся несколько приемов использования операции AND.




Начало  Назад  Вперед