Файл: Системы исчисления чисел, реализация перевода из одной системы в другую на С++.pdf

ВУЗ: Не указан

Категория: Курсовая работа

Дисциплина: Не указана

Добавлен: 14.06.2023

Просмотров: 95

Скачиваний: 2

ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.

Триггеры, объединенные в группы, используются для краткосрочного хранения чисел до, после и во время вычислений, а так же реализующие возможность произведения над хранимыми числами логических преобразований, называются регистрами. Регистры могут быть различных типов, в зависимости от модели и архитектуры процессора их может быть различное количество. Нам в контексте представления чисел интересны два типа регистров и соответствующее им представление – для работы с числами, у которых разделитель целой и дробной части всегда находится в одной и той же позиции и для работы с числами, позиция разделителя целой и дробной части в которых не является постоянной.

Глава 8. Числа с фиксированным разделителем целой и дробной части

Именно реализация предоставления чисел с фиксированной позицией разделителя была первой, так как она гораздо проще и требует меньше места для хранения числа. Диапазон чисел, которые могут быть представлены, зависит от конкретной реализации, но, как правило, в современных вычислительных системах используются регистры с фиксированным разделителем целой и дробной части для операций над целыми числами. Таким образом, разделитель оказывается зафиксирован после младшего раздела в представлении числа.

Кроме того, место занимают и дополнительные биты, несущие дополнительную информацию, например, о знаке числа. Если при выполнении операций происходит выход за диапазон допустимых значений, то это может привести к отбрасыванию значений старших разрядов и получению некорректного результата, либо к ошибке, в зависимости от реализации.

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

Глава 9. Числа с нефиксированным разделителем целой и дробной части


Совершенно иначе хранятся числа с «плавающей запятой» - для того, чтобы не вычислять позицию разделителя, такие числа состоят из двух частей и так же хранятся – первая часть называется мантисса и обозначается m, вторая часть называется порядком p, который показывает степень, в которую возводится основание числа. Значащим элементом в этой ситуации является мантисса, основание, которое обозначается q, указывает на то, в какой системе исчисления находится число. Как правило, число (и мантисса, и порядок) задаются в двоичной форме. Мантисса указывается в виде правильной дроби, причем первый же значащий разряд идет непосредственно после разделителя целой и дробной части. Такое число называется нормализованным.

Использование нормализованных чисел позволяет повысить точность представления числа – ведь в этом случае все значащие разряды мантиссы будут задействованы, и мы можем записать максимум значащих цифр, регулируя реальный размер числа при помощи порядка.

Глава 10. Прямой, обратный, дополнительный код

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

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

Для отрицательных чисел используется либо дополнительный, либо обратный код, и это позволяет максимально упростить операции над числами. Для образования дополнительного и обратного кода используются следующие правила:

  • В случае образования дополнительного кода отрицательного числа в старшем, знаковом разряде ставится единица, а все цифровые разряды инвертируются (то есть единица заменяется на ноль и наоборот), а после этого к младшему разряду прибавляется единица.
  • При образовании обратного кода проводится похожая операция – в знаковый разряд ставится единица, цифровые разряды инвертируются, однако единица к младшему разряду не прибавляется.

При выборе прямого или обратного кода учитывается размер разрядной сетки. Естественно, что из прямого кода можно получить обратный, а из обратного – прямой. Рассмотрим на примере:

Десятичное число

Прямой код

Обратный код

Дополнительный код

-8

-

-

1000

-7

1111

1000

1001

-6

1110

1001

1010

-5

1101

1010

1011

-4

1100

1011

1110

-3

1011

1100

1101

-2

1010

1101

1110

-1

1001

1110

1111

0

1000

0000

1111

0000

0000

1

0001

0001

0001

2

0010

0010

0010

3

0011

0011

0011

4

0100

0100

0100

5

0101

0101

0101

6

0110

0110

0110

7

0111

0111

0111

Таблица 2. Представление положительных и отрицательных чисел.

Как видите, выглядит всё просто. Однако, есть и сложности, например, с представлением нуля – только в дополнительном коде ноль представляется единым образом. Еще одна особенность – положительные числа в прямом, обратном и дополнительном кодах совпадают. Именно поэтому для положительных чисел принято использовать прямой порядок.

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

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


Глава 11. Модифицированный код

Иногда прямого, обратного и дополнительного кода может быть недостаточно. При сложении чисел меньше единицы может возникнуть ситуация, когда в результате сложения будет получено число больше единицы, что приведет к переполнению разрядной сетки. В этом случае применяется модифицированный код, а точнее, три вида модифицированного кода - модифицированный прямой, модифицированный обратный и модифицированный дополнительный коды.

Для кодирования в случае с модифицированными кодами применяются два разряда для кодирования знаков числа, причем в разряды пишутся 11 для знака «минус» и 00 для знака «плюс».

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

Переполнение разрядов может быть обработано следующим образом: при попадании в разряд знака 01 мы можем говорить о переполнении в положительную сторону, а в случае с 10 в разряде можно говорить о переполнении в отрицательную сторону. Старший знаковый разряд указывает на истинный знак в этом случае, а младший содержит «переполненную» значащую цифру числа.

Коррекция переполнения решается сдвигом в разрядной сетке числа на один разряд вправо и помещением в освободившийся старший знаковый разряд цифры, равной новому значению младшего знакового разряда. В случае работы с числами с плавающим разделителем коррекция переполнения мантиссы выполняется увеличением на единицу порядка результата вычислений.

Глава 12. Перевод двоичных чисел в десятичные

При представлении двоичных чисел принято говорить о «весе» числа – показателе степени основания системы. Вес помогает ориентироваться в размерности чисел, представленных в определенном количестве разрядов, а так же, конечно, помогает переводить числа из двоичной системы в десятичную.

Для осуществления перевода мы должны взять сумму всех цифр числа, умноженных на их вес в соответствии с разрядом. Например, переведем число (1011,1)2 из двоичной системы в десятичную:


(1011,1)2=1*23+0*22+1*21+1*20+1*2-1=8+2+1+1/2=11,5

Обратите внимание – при выполнении вычислений в примере мы имели дело с числом с плавающей запятой. Для таких двоичных чисел также применимо понятие веса, однако в случае действий над дробной частью от старшего разряда к младшему используются отрицательные значения веса (-1 для первой позиции, -2 для второй и так далее).

Глава 13. Перевод десятичных чисел в двоичные

Обратное преобразование десятичного числа в двоичное можно сделать несколькими способами.

Широко применяется для перевода целых чисел из десятичной системы в двоичную метод деления. Он очень прост – мы делим исходное число на два «нацело», если у нас остается остаток единица, то мы записываем в младший разряд единицу, если нет – то ноль, а потом снова делим на два, пока не достигнем нуля или двойки в остатке, а исходное число будет уже невозможно разделить на два. Например, переведем в двоичный код число 150:

150\2=75 (остаток 0)

75\2=37 (остаток 1)

37\2=18 (остаток 1)

18\2=9 (остаток 0)

9\2=4 (остаток 1)

4\2=2 (остаток 0)

2\2=1 (остаток 0)

В итоге, записывая результат от старшего разряда к младшему, взяв в старший разряд результат последнего выражения, получаем:

15010=100101102

Особенно наглядно этот способ выглядит при выполнении деления в столбик.

Для десятичных дробей меньше единицы применяется похожая методика, только вместо деления мы применяем умножение, при этом наполняем разряды единицами и нулями, исходя из значения результата умножения на два – если результат больше единицы, то мы берем единицу, если меньше – то ноль, в следующем действии используем только дробную часть, отбрасывая целую вне зависимости от ее значения. Например, возьмем число 0,625 в десятичной системе и переведем в двоичную систему:

0,625*2=1,25 (записываем 1)

0,25*2=0,5 (записываем 0)

0,5*2=1,0 (записываем 1)

0,0*2=0 (записываем 0)

Получаем в итоге: 0,62510=0,1012

Глава 14. Перевод в другие системы исчисления

Как вы уже, наверное, догадались, перевод в другие системы исчисления осуществляется по аналогии с двоичной системой исчисления. Например, для перевода в шестнадцатеричную систему исчисления мы будем использовать при делении или умножении основание системы – 16, а при переводе обратно в качестве весов будут использоваться основания системы с соответствующим показателем степени.