Троичная система счисления
Троичная система счисления — позиционная система счисления с основанием 3. Существует в двух вариантах: несимметричная (цифры 0, 1, 2) и симметричная (цифры −1, 0, 1). Симметричная система позволяет изображать отрицательные числа, не используя отдельный знак минуса.
Десятичная система | −3 | −2 | −1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 |
Троичная несимметричная | −10 | −2 | −1 | 0 | 1 | 2 | 10 | 11 | 12 | 20 | 21 | 22 | 100 |
Троичная симметричная | 0 | 1 | 1 |
10 | 11 | 1 |
1 |
1 |
10 |
100 |
Симметричная троичная система[править | править код]
Симметричная троичная система использовалась в советской ЭВМ Сетунь.
Симметричная троичная система наиболее экономна с точки зрения представления чисел.
Если не использовать значение «неизвестно», троичная логика сводится к обычной двоичной логике.
Представления чисел в троичной системе[править | править код]
Примером представления чисел в троичной системе счисления может служить запись в этой системе целых положительных чисел:
десятичное число……………
троичное число………………
Если в десятичной системе счисления имеется 10 цифр и веса соседних разрядов различаются в 10 раз ( разряд единиц, разряд десятков, разряд сотен), то в троичной системе используются только три цифры и веса соседних разрядов различаются в три раза ( разряд единиц, разряд троек, разряд девяток, …). Цифра 1, написанная первой левее запятой, обозначает единицу; эта же цифра, написанная второй левее запятой, обозначает тройку и т.д. Число 2 изображается цифрой 1 в разряде троек и цифрой (минус единица) в разряде единиц.
Свойства симметричной троичной системы[править | править код]
Благодаря тому что основание 3 нечетно , в троичной системе возможно симметричное относительно нуля расположение цифр: -1, 0, 1, с которым связано два ценных свойства:
- естественность представления отрицательных чисел
- и отсутствие проблемы округления.
Представление отрицательных чисел[править | править код]
Наличие положительных и отрицательных цифр позволяет непосредственно представлять как положительные, так и отрицательные числа. При этом нет необходимости в специальном разряде знака и не надо вводить дополнительный (или обратный) код для выполнения арифметических операций с относительными числами. Все действия над числами, представленными в троичной системе счисления с цифрами 0, 1, -1, выполняются естественно с учетом знаков чисел. Знак числа определяется знаком старшей значащей цифры числа: если она положительна, то и число положительно, если отрицательно, то и число отрицательно. Для изменения знака числа надо изменить знаки всех его цифр (т.е. инвертировать его код).
Например
Округление[править | править код]
Другим полезным следствием симметричного расположения значений цифр является отсутствие проблемы округления чисел: абсолютная величина части числа, представленной отбрасываемыми младшими цифрами, никогда не превосходит половины абсолютной величины части числа, соответствующей младшей значащей цифре младшего из сохраняемых разрядов. Следовательно, в результате отбрасывания младших цифр числа получается наилучшее при данном количестве оставшихся цифр приближение этого числа, и округление не требуется.
Перевод в другие системы счисления[править | править код]
Всякое число, записанное в троичной системе счисления с цифрами 0, 1, -1, можно представить в виде суммы целых степеней числа 3, причем если в данном разряде троичного изображения числа стоит цифра 1, то соответствующая этому разряду степень числа 3 входит в сумму со знаком «+», если же цифра -1, то со знаком «-», а если цифра 0, то вовсе не входит. Это можно представить формулой
, где
целая часть числа, а
дробная часть числа, причем коэффициенты K могут принимать значения 1, 0, -1.
Для того чтобы число, представленное в троичной системе, перевести в десятичную систему, надо цифру каждого разряда данного числа умножить на соответствующую этому разряду степень числа 3 (в десятичном представлении) и полученные произведения сложить.
Девятеричная форма представления команд[править | править код]
Представление команд троичным кодом при программировании и при вводе в машину неудобно и неэкономно, поэтому вне машины применяется девятеричная форма представления команд. Девятеричные цифры сопоставляются парам троичных цифр:
;
При выводе из машины отрицательные девятеричные цифры обозначают буквами:
девятеричная цифра | ||||
буква латинского алфавита | Z | Y | X | W |
буква русского алфавита | Ц | У | Х | Ж |
Исключающее ИЛИ[править | править код]
Вычисляется min(max(x, y), −min(x, y)):
⊕ | -1 0 +1 ---+---------- -1 | -1 0 +1 0 | 0 0 0 +1 | +1 0 -1
Перевод числа в троичную систему счисления[править | править код]
Реализация перевода числа в троичную симметричную (задача «ВСимметричную»), несимметричную (задача «ВНесимметричную)» систему счисления и обратно (задача «ВЧисло») на языке Глагол (для вывода числа в симметричной системе счисления используются знаки «-», «0», «+»):
ПЕР память: ДОСТУП К НАБОР ячейки: РЯД 20 ИЗ ЦЕЛ; размер: УЗКЦЕЛ; отрицательное: КЛЮЧ КОН; ЗАДАЧА СоздатьПамять; УКАЗ СОЗДАТЬ(память); память.размер := 0; память.отрицательное := ОТКЛ КОН СоздатьПамять; ЗАДАЧА ДобавитьВПамять(что: ЦЕЛ); УКАЗ память.ячейки[память.размер] := что; УВЕЛИЧИТЬ(память.размер) КОН ДобавитьВПамять; ЗАДАЧА ОбратитьПамять; ПЕР зчсл: ЦЕЛ; сч: ЦЕЛ; УКАЗ ОТ сч := 0 ДО память.размер ДЕЛИТЬ 2 - 1 ВЫП зчсл := память.ячейки[сч]; память.ячейки[сч] := память.ячейки[память.размер-сч-1]; память.ячейки[память.размер-сч-1] := зчсл КОН КОН ОбратитьПамять; ЗАДАЧА ВывестиПамять(симметричная: КЛЮЧ); ПЕР сч: ЦЕЛ; УКАЗ ЕСЛИ НЕ симметричная И память.отрицательное ТО Вывод.Цепь("-") КОН; ОТ сч := 0 ДО память.размер-1 ВЫП ЕСЛИ симметричная ТО ЕСЛИ память.ячейки[сч] < 0 ТО Вывод.Цепь("-") АЕСЛИ память.ячейки[сч] > 0 ТО Вывод.Цепь("+") ИНАЧЕ Вывод.Цепь("0") КОН ИНАЧЕ Вывод.ЧЦел("%d", память.ячейки[сч], 0, 0, 0) КОН КОН КОН ВывестиПамять; ЗАДАЧА УдалитьПамять; УКАЗ память := ПУСТО КОН УдалитьПамять; ЗАДАЧА ВНесимметричную(число: ЦЕЛ); УКАЗ ЕСЛИ число < 0 ТО память.отрицательное := ВКЛ КОН; число := МОДУЛЬ(число); ПОКА число >= 3 ВЫП ДобавитьВПамять(число ОСТАТОК 3); число := число ДЕЛИТЬ 3 КОН; ДобавитьВПамять(число); ОбратитьПамять; ВывестиПамять(ОТКЛ); КОН ВНесимметричную; ЗАДАЧА ВСимметричную(число: ЦЕЛ); ПЕР о: ЦЕЛ; з: КЛЮЧ; ЗАДАЧА ВПамять(что: ЦЕЛ); УКАЗ ЕСЛИ память.отрицательное ТО ЕСЛИ что < 0 ТО ДобавитьВПамять(1) АЕСЛИ что > 0 ТО ДобавитьВПамять(-1) ИНАЧЕ ДобавитьВПамять(0) КОН ИНАЧЕ ДобавитьВПамять(что) КОН КОН ВПамять; УКАЗ ЕСЛИ число < 0 ТО память.отрицательное := ВКЛ КОН; число := МОДУЛЬ(число); з := ОТКЛ; ПОКА число > 0 ВЫП о := число ОСТАТОК 3; число := число ДЕЛИТЬ 3; ЕСЛИ з ТО ЕСЛИ о = 2 ТО ВПамять(0) АЕСЛИ о = 1 ТО ВПамять(-1) ИНАЧЕ ВПамять(1); з := ОТКЛ КОН ИНАЧЕ ЕСЛИ о = 2 ТО ВПамять(-1); з := ВКЛ ИНАЧЕ ВПамять(о) КОН КОН КОН; ЕСЛИ з ТО ВПамять(1) КОН; ОбратитьПамять; ВывестиПамять(ВКЛ); КОН ВСимметричную; ЗАДАЧА ВЧисло(): ЦЕЛ; ПЕР сч, мн: ЦЕЛ; результат: ЦЕЛ; УКАЗ результат := 0; мн := 1; ОТ сч := 0 ДО память.размер-1 ВЫП УВЕЛИЧИТЬ(результат, память.ячейки[память.размер-сч-1]*мн); мн := мн * 3 КОН; ВОЗВРАТ результат КОН ВЧисло;
См. также[править | править код]
Литература[править | править код]
Брусенцов Н.П., С.П. Маслов, В.П. Розин, А.М. Тишулина "Малая цифровая вычислительная машина Сетунь" Издательство Московского университета 1965