Студопедия.Орг Главная | Случайная страница | Контакты | Мы поможем в написании вашей работы!  
 

Уравновешенные системы счисления



Системы счисления

Система счисления - способ записи (изображения) чисел.

Символы, при помощи которых записывается число, называются цифрами.

Системы счисления, в которых количественный эквивалент каждой цифры зависит от ее положения (позиции) в коде(записи) числа, называются позиционными.

Основанием позиционной системы счисления называется количество знаков или символов, используемых для изображения числа в данной системе счисления.

Базисом позиционной системы счисления называется последовательность чисел, каждое из которых задает количественное значение или "вес" каждого разряда.

Например: Базисы некоторых позиционных систем счисления.

Десятичная система: 100, 101, 102, 103, 104,..., 10n,...

Двоичная система: 20, 21, 22, 23, 24,..., 2n,...

Восьмеричная система: 80, 81, 82, 83, 84,..., 8n,...

Совокупность различных цифр, используемых в позиционной системе счисления для записи чисел, называется алфавитом системы счисления. Количество цифр в алфавите равно основанию системы счисления.

Уравновешенные системы счисления

---===---

Двоичная СС с большим успехом используется в компьютерной технике

до сих пор. Однако выявились и существенные недостатки использования

двоичной СС, влияющие на скорость работы процессора и надежность передачи

информации.

Одним из этих недостатков является так называемая проблема представления

отрицательных чисел. Попытка преодолеть этот и другие недостатки двоичной

системы счисления стимулировала использование в компьютерах других систем

счисления и развитие собственно теории систем счисления.

Выбирая систему кодирования информации в компьютере, разработчики в

первую очередь думают о быстродействии процессора, т.е. о скорости обработки

закодированной информации.

///

Что привычно и хорошо для человека, выполняющего вычисления на бумаге,

не всегда хорошо для компьютера. Для того чтобы сложить два целых числа

с разными знаками, и человек, и компьютер, вообще говоря, должны выполнить

следующие действия:

1) взять модули слагаемых;

2) сравнить эти модули;

3) запомнить знак большего по модулю слагаемого;

4) получившийся результат з

5) из большего модуля вычесть меньший модуль;

6) записать со знаком из п. 3.

Многовато будет для простой и часто используемой операции!

\\\

В десятичной системе счисления для представления отрицательных чисел

человек использует знак числа. То, есть для записи отрицательных чисел

имеющихся 10 знаков недостаточно. Используется еще один знак - '-'.

То есть для записи отрицательных десятичных чисел потребоваломь 11 знаков!

Аналогично, для записи отрицательных двоичных чисел требуется 3 знака,

но в нашем распоряжении их два - 0 и 1. Для решения проблемы вначале века

использовалось прямое кодирование: в старший бит регистра числа явно

вписывался знак '0' для положительных и знак '1' для отрицательных чисел.

При определении значения числа этот бит игнорировался. Вроде бы все

нормально, но процессор не может работать с отдельными битами регистра.

Для определения знака числа, число загружалось в процессор, применение

маски (числа 10 или 1000) оставляло в регистре только бит знака, весь

регистр проверялся (ноль или нет). Для выделения значения числа снова

использовалась маска (7F или 7FFF), после чего определялось число -

не слишком ли много действий процессора для выполнения простых операций?

///

для 1 байта 5 = 00000101 -5 = 10000101

\\\

Чтобы сократить число действий процессора, придумали обратный код:

для чисел договорились старший бит не использовать, а для получения

отрицательного числа выполнять команду инвертирования - менять в записи

0 на 1, а 1 на 0. Это одна команда для процессора. Но проверка бита

знака все равно остется.

///

для 1 байта 5 = 00000101 -5 = 11111010

\\\

Кроме всего прочего применение прямого или обратного кодирования

добавляет новую проблему: число 0 оказываеися можно хранить двумя

разными способами (как?). Появились значения +0 и -0.

Представьте, решаем квадратное уравнение, и начинаем проверять,

равен ли он 0. Поребуется сравнивать как с число 0, так и с числом -0,

- двойная работа!

Использующийся в настоящее время во всех компьютерах способ хранения

отрицательных чисел называется "дополнительный код". Для получения из

положительного числа отрицательного, как и при дополнительном коде,

выполняют инвертирование, после чего к результату добавляется 1.

Неболбьшое усложнение кодирования снимает проблему двойного представления

нуля:

00000000 - исходное

11111111 - после инвертирования

----------

100000000 - после добавления 1

Так как самый старший бит является девятым и в однобайтный регистр не

помещается, он будет отброшен. То есть 0 представляется только как 00000000.

Кодирование называется дополнительным, потому что положительное и

отрицательное числа "дополняют" друг друга до той самой единицы, бит для

хранения которой выходит за пределы регистра. Поэтому и преобразование

отрицательного числа в положительное происходит по тому же правилу:

инверсия и увеличение на 1.

Еще одно преимущество такого представления чисел: появилась возможность

отказаться от операции вычитания. Вместо нее применяется сложение с

отрицательным числом.

Попробуйте выполнить сложение над двоичными числами, записанными в

дополнительном коде.

///

!!! подобрать примеры сложения положительных, отрицательных, смешанных чисел!!!

\\\

Все вроде хорошо, но попробуйте в переменную X, объявленную как

var x:integer;

записать положительное число 37000, хранимое без знака (как word),

получим, неожидано, отрицательный результат -28536!

Подобные фокусы могут привести к ошибочной интерпретации результатов

работы программы.

///

var x:integer; y:word;

begin

y:=37000; x:=y; writeln(x); readln;

end.

\\\

Ошибка произошла потому, что типы integer и word по разному понимают

содержимое старшего бита регистра.

---===---

Троичная система

Можно ли записывать целые отрицательные числа без знака, но и без

дополнительного кодирования?

Можно! Например, в любой P-ичной уравновешенной системе счисления.

Уравновешенная система с наименишим основанием - это троичная.

В 60-х годах XX столетия в МГУ им. М.В. Ломоносова была создана

троичная ЭВМ "Сетунь", запущенная потом в серию. Для кодирования информации

в этой машине использовалась троичная уравновешенная система счисления,

вместо бита использовался трит, вместо привычной двоичной логики - троичная.

Разработчик этой ЭВМ Николай Петрович Брусенцов.

Quot;бит" - место для хранения двоичной цифры - 0 или 1, "трит" - место для хранения цифры троичной системы счисления.   Троичную систему счисления можно построить, как и другие, взяв за основание число 3. Базой при этом будут числа 1, 3, 9, 27, 81,..., а цифрами (алфавитом) 0, 1 и 2. Но кто нам мешает в качестве цифр взять символы { a, 0, 1}, где a равно -1. Глядя на набор цифр, понятно, почему эту систему назвали уравновешенной, или симметричной. Количество цифр до цифры 0 такое же ("уравновешено с"), что количество цифр после цифры 0. "Уравновесить" можно любые системы счисления с нечетным основанием.   Десятичное число Число в троичной уравновешенной системе положительное отрицательное положительное отрицательное 1 -1 1 a 2 -2 1a a1 3 -3 10 a0 4 -4 11 aa 5 -5 1aa a11 6 -6 1a0 a10 7 -7 1a1 a1a   Очевидно, знак для представления отрицательных чисел в урвновешенных системах счисления не нужен! Если у нас есть хотя бы трицифры, обязательно 0, обязательно 1, для третьей цифры можем ставить в соответствие отрицательное значение (-1). Можно ввести отрицательные значения для некотрых цифр СС с четным основанием, но это приводит к тому, что некоторые числа можно будет записать разными способами. /// Для "четверичной" системы счисления можно выбрать и {-1, 0, 1, 2}, и {-2, -1, 0, 1}. \\\   ---===---   Рассмотрим операции сложения и вычитания в троичных системах:   в троичной системе Сложение   + 0 1 2 0 0 1 2 1 1 2 10 2 2 10 11   Умножение   * 0 1 2 0 0 0 0 1 0 1 2 2 0 2 11     в троичной уравновешенной системе сложение + 1 0 1 1 11 1 0 0 1 0 1 1 0 1 11   умножение * 1 0 1 1 1 0 1 0 0 0 0 1 1 0 1     /// сформировать правила построения таблиц сложения и умножения и правила арифметических операций для целых чисел. \\\ ЧислаФибона́ччи — элементы числовой последовательности, где каждое следующее число образуется суммой двух перед ним стоящих чисел (кроме первых двух).





Дата публикования: 2015-11-01; Прочитано: 1233 | Нарушение авторского права страницы | Мы поможем в написании вашей работы!



studopedia.org - Студопедия.Орг - 2014-2024 год. Студопедия не является автором материалов, которые размещены. Но предоставляет возможность бесплатного использования (0.009 с)...