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


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


Вы могли заметить, что значение строчной буквы в коде ASCII отличается от значения прописной в точности на 32 (в десятичной системе счисления). Мы можем создать определение, которое осуществляло бы перевод строчного символа в прописной:: ПРОПИСНОЙ ( строчный-символ -- прописной-символ ) 32 - ;

Итак, 97 EMIT a ok

97 ПРОПИСНОЙ EMIT A ok

К сожалению, данный вариант слова ПРОПИСНОЙ не будет действовать в том случае, если переводимый символ уже является прописным, поскольку весь процесс перевода сводится к простому вычитанию.

Но код ASCII разработан очень мудро. Число 32 выбрано не случайно, а с учетом его представления в двоичной системе счисления. Посмотрите, как выглядят представления прописной и строчной букв А: A 1000001 a 1100001

Они отличаются только одним битом, который и представляет число 32. Если мы сбросим этот бит в 0, то независимо от того, была ли буква прописной или строчной, она станет прописной: : ПРОПИСНОЙ ( строчный-символ -- прописной-символ ) 95 AND ;

Число 95 является десятичным эквивалентом двоичного числа 1011111

и совпадает с маской для двоичного представления числа 32. Следовательно, 97 ПРОПИСНОЙ EMIT A ok

65 ПРОПИСНОЙ EMIT A ok

(Однако поведение рассматриваемого варианта слова ПРОПИСНОЙ оказывается несколько странным по отношению к небуквенным символам. Попытайтесь, к примеру, перевести цифры.)

Слово XOR также предназначено для работы с битами. Как отмечалось в гл. 4, при выполнении этой операции истина получается только тогда, когда один из аргументов (но не оба сразу) истинен. Сравним результат выполнения операций XOR и OR:1000100100001001 1000100100001001

0000001111001000 OR 0000001111001000 XOR ---------------- ---------------- 1000101111001001 1000101011000001

Если вы применяете операцию XOR с аргументом, все биты которого равны единице, то тем самым инвертируете биты второго аргумента. 1111111111111111 1000100100001001 XOR ---------------- 0111011011110110

Таким образом, выражение -1 XOR

является двоичной маской или шаблоном инвертирования. (Существует математический термин дополнение числа до единицы.)

Стандарт-83 и операция NOT Стандарт 83 изменил первоначальный смысл операции NOT В системах, разработанных до принятия этого Стандарта, слово NOT заменяло значение логического аргумента оператора IF противоположным, т е не нуль (истина) становился нулем (ложью) Оно было синонимом слова О.= , созданным для улучшения читабельности программы. В Стандарте-83 слово NOT эквивалентно выражению "-1 XOR" и не сработает в том случае, если значение исходного флага «истина» не представлено как -1. 

Обязательно убедитесь в том, что инвертируемое значение является логическим, а не арифметическим. Выражение "0= NOT" вырабатывает из ненулевого значения правильное логическое значение «истина».




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