Я знаю, что слово AND определяет двоичный код and
... но что определяет логический and
?Логический И в Форте?
ответ
То же слово, AND
, также используется для логических и. Но два входных значения до AND
рекомендуются как хорошо сформированные флаги; true и false представлены двумя значениями, бит всего набора (-1) и битами все unset (0). Другие значения, чем они могут работать как истинные (как в C), но могут привести к тонким ошибкам.
Все операторы сравнения возвращают хорошо сформированные флаги, но, например, -
нет. Нижеследующее оценивает значение false (0).
7 5 - 7 3 - AND
AND
получает битовые шаблоны 100 и 010. В результате 0 (как это делает поразрядный и).
Ссылки:
- Bit Manipulations in Forth, часть обучения Forth по кусочкам.
- Раздел «Маленькая логика» в Chapter 4 от Начиная с.
The Forth AND бит-мудрый И по 64-битным значениям. Конечно, эти операторы работают нормально с масками. Но если эти значения являются всеми или всеми нулями, результатом также являются все единицы или все нули (то же самое верно для операций бит-бит OR и XOR INVERT).
Булевский флаг в Форте - это все единицы или все нули. Поэтому, если входы являются логическими флагами, вывод AND OR XOR INVERT также является логическим, и эти операторы могут быть использованы для представления булевых операторов. Обратите внимание, что операции типа = < 0 = приводят к логическому значению.
Ситуация аналогична +. Поскольку целые числа определяются как два дополнения, + (плюс) могут использоваться как для подписанных, так и для неподписанных чисел. Таким образом, нет никакого отдельного имени для беззнакового добавления целых чисел.
Не знаю, достаточно сказать, если это действительно так, но битовые шаблоны 0xFF00 и 0x00FF имеют побитовые и 0x0000, но логические и True (поскольку оба отличные от нуля) – SingleNegationElimination
@TokenMacGuy: Спасибо! Это был такой пример, который я искал. Я обновил ответ. –