2/: различия между версиями
AtH (обсуждение | вклад) |
AtH (обсуждение | вклад) |
||
(не показано 5 промежуточных версий этого же участника) | |||
Строка 1: | Строка 1: | ||
'''2/''' (на два делить нацело, читается «два дробь») — стандартное слово [[Каллисто]]. Целочисленное деление на 2 (двоичный сдвиг вправо). | '''2/''' (на два делить нацело, читается «два-дробь») — стандартное слово [[Каллисто]]. Целочисленное деление на 2 (двоичный сдвиг вправо). | ||
2/ ( x -- n ) Половина. n ← [x/2] | 2/ ( x -- n ) Половина. n ← [x/2] | ||
[[Файл:CallistoTwo.png|thumb|right|264px|Пример работы слова 2/]] | [[Файл:CallistoTwo.png|thumb|right|264px|Пример работы слова 2/]] | ||
Строка 6: | Строка 6: | ||
== Ввод слова 2/ == | == Ввод слова 2/ == | ||
В [[Режим NUM|режиме NUM]] последовательно нажмите три клавиши [[Клавиша 2|{{Серая клавиша|2}}]] [[Клавиша F|{{Оранжевая клавиша|F}}]] [[Клавиша ÷|{{Серая клавиша|÷}}]] | В [[Режим NUM|режиме NUM]] последовательно нажмите три клавиши [[Клавиша 2|{{Серая клавиша|2}}]] [[Клавиша F|{{Оранжевая клавиша|F}}]] [[Клавиша ÷|{{Серая клавиша|÷}}]] | ||
== 2/ в стандарте ANS Forth == | == 2/ в стандарте ANS Forth == | ||
<PRE> | |||
6.1.0330 2/ "two-slash" CORE | 6.1.0330 2/ "two-slash" CORE | ||
( x1 -- x2 ) | ( x1 -- x2 ) | ||
Строка 22: | Строка 18: | ||
как 2∗. Оно часто реализовано на машинах с дополнительным кодом (дополнение до | как 2∗. Оно часто реализовано на машинах с дополнительным кодом (дополнение до | ||
двух) аппаратным сдвигом вправо, который распространяет знаковый разряд. | двух) аппаратным сдвигом вправо, который распространяет знаковый разряд. | ||
</PRE> | |||
== История == | == История == | ||
Строка 35: | Строка 32: | ||
== Реализация == | == Реализация == | ||
Слово 2/ осуществляет арифметический сдвиг вправо на один двоичный разряд — сохраняя знак всех целых чисел, кроме 1. [[2×|Слово 2×]] осуществляет обратное действие, двоичный сдвиг влево. | |||
[[Каллисто|Каллисто 1.0]] реализована поверх десятичной машины [[«Электроника МК-161»]], поэтому поведение этих двух команд может не всегда соответствовать тому, как они реализованы на двоичных форт-машинах: | |||
<pre> | |||
1314 ;#TwoDiv | |||
1315 ; 2/ ( x −− n ) Половина. n := Trunc [x/2] | |||
1316 LDIV2: .DB 2 | |||
1317 .TEXT "2/" ; ( n −− [n/2] ) | |||
1318 .DW LMUL2 | |||
1319 DIV2: .DW JDIV2 | |||
1320 JDIV2: PKRM03 2 / KINT PKM03 KGOTO9 ; Целочисленное деление на 2 (двоичный сдвиг вправо). | |||
</pre> | |||
Реализация из SP-Forth 4.20: | |||
<pre> | |||
CODE 2/ ( x1 -- x2 ) \ 94 | |||
\ x2 - результат сдвига x1 на один бит вправо без изменения старшего бита. | |||
D1 C, F8 C, \ SAR EAX, # 1 | |||
RET | |||
END-CODE | |||
</pre> | |||
=== Советская реализация === | |||
Слово 2/ в ФОРТ-ЕС было [[примитив]]ом. Вот его описание и определение: | Слово 2/ в ФОРТ-ЕС было [[примитив]]ом. Вот его описание и определение: | ||
<PRE> | <PRE> | ||
Строка 75: | Строка 94: | ||
[[Категория:Одноместные операции Каллисто]] | [[Категория:Одноместные операции Каллисто]] | ||
[[Категория:Операции целочисленного деления Каллисто]] | [[Категория:Операции целочисленного деления Каллисто]] | ||
[[Категория:Стандартные слова]] | |||
[[Категория:1994 CORE]] | |||
[[Категория:2012 CORE]] |
Текущая версия от 17:01, 10 ноября 2017
2/ (на два делить нацело, читается «два-дробь») — стандартное слово Каллисто. Целочисленное деление на 2 (двоичный сдвиг вправо).
2/ ( x -- n ) Половина. n ← [x/2]
Делит x на 2. Отбрасывает остаток (цифры после запятой), а частное n заносит в стек.
Ввод слова 2/[править]
В режиме NUM последовательно нажмите три клавиши 2 F ÷
2/ в стандарте ANS Forth[править]
6.1.0330 2/ "two-slash" CORE ( x1 -- x2 ) x2 - результат смещения x1 на один бит к младшему двоичному разряду, оставляет старший бит неизменным. A.6.1.0330 2/ Это слово имеет то же самое общее использование и следствие неверного названия как 2∗. Оно часто реализовано на машинах с дополнительным кодом (дополнение до двух) аппаратным сдвигом вправо, который распространяет знаковый разряд.
История[править]
2/ в предыдущем стандарте Forth-83 (англ.)[править]
2/ n1 -- n2 83 "two-divide" n2 is the result of arithmetically shifting n1 right one bit. The sign is included in the shift and remains unchanged.
2/ в стандарте Forth-79 (англ.)[править]
2/ n1 -- n2 "two-divide" Leave (n1)/2.
Реализация[править]
Слово 2/ осуществляет арифметический сдвиг вправо на один двоичный разряд — сохраняя знак всех целых чисел, кроме 1. Слово 2× осуществляет обратное действие, двоичный сдвиг влево.
Каллисто 1.0 реализована поверх десятичной машины «Электроника МК-161», поэтому поведение этих двух команд может не всегда соответствовать тому, как они реализованы на двоичных форт-машинах:
1314 ;#TwoDiv 1315 ; 2/ ( x −− n ) Половина. n := Trunc [x/2] 1316 LDIV2: .DB 2 1317 .TEXT "2/" ; ( n −− [n/2] ) 1318 .DW LMUL2 1319 DIV2: .DW JDIV2 1320 JDIV2: PKRM03 2 / KINT PKM03 KGOTO9 ; Целочисленное деление на 2 (двоичный сдвиг вправо).
Реализация из SP-Forth 4.20:
CODE 2/ ( x1 -- x2 ) \ 94 \ x2 - результат сдвига x1 на один бит вправо без изменения старшего бита. D1 C, F8 C, \ SAR EAX, # 1 RET END-CODE
Советская реализация[править]
Слово 2/ в ФОРТ-ЕС было примитивом. Вот его описание и определение:
2/ W1->W2 АРИФМЕТИЧЕСКИЙ СДВИГ ВПРАВО НА 1 20 Экран номер 20 ( 31.03.86 SP@ SP! RP@ RP! 2/ 2* 2@ 2! DEPTH ) CODE 2/ ( W1->W2 ) RW1 PULL, RW1 1 SRA, PUTRM1 B, END-CODE
В FORTH ИТЭФ слово 2/ было примитивом, вот его определение:
HEAD 202Q,'2',257Q,DIV2 ; 2/ POP AX SAR AX, 1 PUSH AX NEXT
Ссылки[править]
- Исходный текст слова 2/ в Каллисто Классик 1.0
- См. слова /, 2×, 2+ и 2−
- См. также символ /
- Слово 2/ (two-slash) и комментарии к нему в стандарте ANS Forth (англ.)
- Слово RSHIFT в стандарте ANS Forth (англ.)
- Слова 2/ (two-slash) и RSHIFT в черновике Forth 200x (англ.)
- Битовый сдвиг в Википедии
- Logical shift и Arithmetic shift в английской Википедии (англ.)
- ОПЕРАЦИИ НАД ЦЕЛЫМИ ЧИСЛАМИ в книге Л.Броуди «Начальный курс программирования на языке Форт»
- ЧИСЛО ТИПОВ ЧИСЕЛ в книге Л.Броуди «Начальный курс программирования на языке Форт»
- The Philosophy of Fixed Point в книге Leo Brodie Starting Forth (англ.)
- A Number of Kinds of Numbers в книге Leo Brodie Starting Forth (англ.)
Это заготовка статьи. Вы можете помочь проекту, дополнив её. |