Редактирование:
NOT
(раздел)
Перейти к навигации
Перейти к поиску
Внимание:
Вы не вошли в систему. Ваш IP-адрес будет общедоступен, если вы запишете какие-либо изменения. Если вы
войдёте
или
создадите учётную запись
, её имя будет использоваться вместо IP-адреса, наряду с другими преимуществами.
Анти-спам проверка.
Не
заполняйте это!
== Реализация == В [[Каллисто]] для записи 32-битных целых чисел в [[Стек данных|десятичном стеке]] используется [[дополнительный код]] (''англ.'' two's complement). Это значит, что операция NOT превращает положительные числа, меньшие 2'147'483'648, в отрицательные. -1 превращается в ноль (и наоборот), остальные отрицательные числа превращаются в положительные. Хотя NOT можно использовать для логического отрицания результата сравнений (возвращающие [[TRUE|«истину»]] слова [[Каллисто]] всегда используют для неё значение -1), в общем случае для похожих целей лучше использовать слово [[0=]]. [[0=]] произведёт правильное логическое отрицание, даже если «истина» закодирована не -1, а любым другим числом, отличным от нуля. Как и [[слово /−/]], слово NOT реализовано с использованием [[Команда /−/|команды ЭКВМ /−/]]. В отличии от [[Слово /−/|/−/]], слово NOT предназначено для работы исключительно с 32-битными целыми числами в [[Дополнительный код|дополнительном коде]]. Если вам нужно инвертировать 16-битное целое без знака, используете последовательность {{Текст на индикаторе|NOT 65535, AND}} или более быструю {{Текст на индикаторе|65535, XOR}}. В [[Каллисто|Каллисто 1.0]] слово NOT является [[примитив]]ом: <pre> 1506 ; Преобразование 32−битного беззнакового в 32−битное знаковое. 1507 Sign32: 1508 32768 ENT 65536 ∗ ; 2 147 483 648 1509 − FX<0 S32Fix 1510 FANS + RTN ; Восстановить исходное число 1511 S32Fix: FANS − RTN ; Преобразовать … 1533 ;#NOT 1534 ; NOT ( n −− i ) 32−битная логическая инверсия (не). i := ∼n 1535 LINVERT: .DB 3 1536 .TEXT "NOT" ; ( n −− NOT n ) 1537 .DW LSXOR 1538 INVERT: .DW JINVERT ; 32−битное побитовое логическое отрицание (НЕ). 1539 JINVERT: PKRM03 KINT PGSB Sign32 1540 1 + +/− PKM03 KGOTO9 ; Отрицание через арифметику. </pre> При необходимости NOT можно определить через [[Слово /−/|/−/]] или [[Слово −|вычитание]]: : NOT ( i -- NOT i ) 1+ /−/ ; : NOT ( i -- NOT i ) -1 ↔ − ; === Реализация в SP-Forth 4.20 === <pre> CODE INVERT ( x1 -- x2 ) \ 94 \ Инвертировать все биты x1 и получить логическую инверсию x2. NOT EAX RET END-CODE </pre> === Советская реализация === У Баранова-Ноздрунова приводится следующее описание слова NOT (стр. 25): : NOT ( A ---> ^A ) -1 XOR ; Описание и определение слова NOT в ядре ФОРТ-ЕС: <PRE> NOT N1->N2 ПОРАЗРЯДНОЕ ИНВЕРТИРОВАНИЕ 13 Экран номер 13 ( 31.03.86 AND OR XOR NOT 0= 0< ) : NOT ( W1->W2 ) -1 XOR ; </PRE>
Описание изменений:
Пожалуйста, учтите, что любой ваш вклад в проект «ПМК вики» может быть отредактирован или удалён другими участниками. Если вы не хотите, чтобы кто-либо изменял ваши тексты, не помещайте их сюда.
Вы также подтверждаете, что являетесь автором вносимых дополнений, или скопировали их из источника, допускающего свободное распространение и изменение своего содержимого (см.
Pmkwiki:Авторские права
).
НЕ РАЗМЕЩАЙТЕ БЕЗ РАЗРЕШЕНИЯ ОХРАНЯЕМЫЕ АВТОРСКИМ ПРАВОМ МАТЕРИАЛЫ!
В целях защиты вики от автоматического спама в правках просим вас решить следующую каптчу:
Отменить
Справка по редактированию
(в новом окне)
Навигация
Персональные инструменты
Вы не представились системе
Обсуждение
Вклад
Создать учётную запись
Войти
Пространства имён
Статья
Обсуждение
русский
Просмотры
Читать
Править
История
Ещё
Поиск
Навигация
Заглавная страница
Свежие правки
Случайная страница
Справка по MediaWiki
Инструменты
Ссылки сюда
Связанные правки
Служебные страницы
Сведения о странице