Нетрадиционные системы счисления
Уравновешенная троичная система счисления
Быть может, самой изящной и всех систем счисления является уравновешенная троичная система счисления (по основанию 3), которой используются «триты» (троичные цифры) -1, 0, `1.
Уравновешенные троичные числа | Десятичные числа | ||||||||||
`1 | |||||||||||
`1 | . | `1 | `1 | 32 5/9 | |||||||
`1 | `1 | . | -32 5/9 | ||||||||
` | `1 | -33 | |||||||||
. | … | ½ |
Уравновешенная троичная система обладает ряд привлекательных свойств.
1. Отрицание числа осуществляется взаимной заменой 1 и `1.
2. Знак числа задаётся его наиболее значимым ненулевым тритом; в общем случае можно сравнивать любые два числа, используя лексикографический порядок при чтении слова слева направо, как в десятичной системе.
3. Операция округления в уравновешенной троичной системе выполняется совсем просто, если воспользоваться таблицей сложения.
Уравновешенная троичная система счисления была положена в основу экспериментальной советской вычислительной машины СЕТУНЬ.
Системы счисления с отрицательными основаниями
Системы счисления по отрицательному основанию впервые описаны Виттрорио Грюнвальдом (Vittorio Grunwald) в Giornale di Matematiche di Battaglini (1885). В этой работе изложены правила выполнения в таких системах четырёх арифметических действий, а также рассмотрены правила извлечения корня, проверка делимости и перевод из одной системы счисления в другую. Однако работа Грюнвальна осталась незамеченной, так как она была опубликована в недостаточно известном журнале и вскоре забыта. Следующее исследование по системам счисления по отрицательному основанию опубликовал О. Кемнер (A.J. Kempner) в 1936 г. В этой работе о рассмотрел свойства систем счисления с нецелыми основаниями и отметил в примечаниях, что системы счисления с отрицательными основаниями также будут иметь право на существование. Двадцать лет спустя эта идея снова была предложена, на этот раз З. Павляком (Z. Pawlak) и А. Вакуличем (A.Wakulicz), а также Л. Уэйделом (L. Waidel) в 1957 г. Экспериментальные вычислительные машины, в которых (‑2) использовалось в качестве основания системы счисления, были созданы в Польше в конце 50-х г.г.
Отрицательные числа
Двоичные числа могут быть как со знаком, так и без знака. Числа без знака, записанные в одном байте, используют все восемь битов для получения значения. Например, 111111112=25510. Для чисел со знаком только семь младших битов байта используется для получения его значения, а старший восьмой бит является знаковым битом. Значение 0 старшего бита соответствует положительному числу, а 1 – отрицательному. Для отрицательных чисел также меняется способ представления значения. Отрицательные двоичные числа содержат единичный бит в старшем разряде и выражаются двоичным дополнением. Для представления двоичного числа необходимо инвертировать все биты, равного по модулю положительного числа, а затем соответствующего прибавить 1.
Исходное двоичное число (соответствует десятичному 65) | |
Инверсные биты: | |
Плюс 1, т.е. дополнительный код (соответствует десятичному числу (-65) |
Для определения абсолютного значения отрицательного двоичного числа также выполняют предыдущие операции – инвертируют все биты и прибавляют 1.
Исходное отрицательно число (соответствует десятичному (-65)) | |
Инверсные биты: | |
Плюс 1 (соответствует десятичному числу 65_ |
Сумма 65 и (-65) должна составлять ноль. Получим:
+ | |
Все восемь бит имеют нулевое значение. Перенос единичного бита влево потерян.
Двоичное вычитание выполнятся следующим образом: инвертируется знак вычитаемого и складывают два числа. Вычтем, например 42 из 65. Двоичное представление для 42 – это 001010102, и его двоичного дополнение – 110101012:
+ | (-42) | + | ||
Если байт интерпретируется как целое число со знаком, то старший бит (бит 7) указывает знак числа. Знаковый бит равен 0, если число положительно или равно 0, и 1, если оно отрицательно.
Если байт содержит числа со знаком, то он может представлять положительные значения от 0 (двоичное значение 00000000) до +127 (двоичное значение 01111111) и отрицательные числа от –1 (двоичное значение 11111111) до –128 двоичное значение (10000000).
Определение 7. Прямой код. Прямой код двоичного числа совпадает по изображению с записью самого числа. Значение знакового разряда для положительных чисел равно 0, а для отрицательных чисел 1.
Определение 9. Обратный код. Обратный код для положительного числа совпадает с прямым кодом. Для отрицательного числа все цифры числа заменяются на противоположные (1 на 0, 0 на 1), а в знаковый разряд заносится единица.
Определение 10. Дополнительный код. Дополнительный код положительного числа совпадает с прямым кодом. Для отрицательного числа дополнительный код образуется путем получения обратного кода и добавлением к младшему разряду единицы.
Пример 20. Прямой обратный и дополнительный коды двоичных чисел.
Для числа +10000012
Прямой код | Обратный код | Дополнительный код |
Для числа -10000012
Прямой код | Обратный код | Дополнительный код |