Сделай Сам Свою Работу на 5

Перевод целых чисел из одной позиционной системы счисления в другую





Пусть задано число А в произвольной позиционной системе счисления с основанием L и его необходимо перевести в новую систему счисления с основанием Р, т.е. преобразовать к виду: А(p)= аnрn + аn-1рn-1 + ... а1р1 + а0р0, где ai=0/(p-1) - база новой системы счисления.

Это выражение можно записать в виде: А=А1р+а0, где А1= (аnрn-1 + аn-1рn-2 + ... а2р1 + а1) - целая часть частного, а0 - остаток от деления А/р, который является цифрой младшего разряда искомого числа. При делении числа А1 на р получим остаток а1 и т.д.

По схеме Горнера: А=(...((anp+an-1)p+an-2)p+...+a1)p+a0, после чего правую часть последовательно разделить на основание новой системы счисления р, то получим коэффициенты: A=A1p+a0, A1=A2p+a1, An-1=Anp+an-1, A0=0*p+an. При этом деление продолжается до тех пор, пока не окажется, что An < p, An+1=0.

Правило перевода целых чисел из одной позиционной системы счисления в другую формулируется следующим образом:

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



[138]10=[10001010]2=[212]8=[8А]16.

Деление выполнить в двоичной системе трудно, поэтому на практике удобнее пользоваться общей записью числа в виде полинома. При переводе двоичных чисел в десятичную систему счисления обычно подсчитывают сумму степеней основания 2, при которых коэффициенты аі равны 1. Расчеты при этом ведутся в десятичной системе.

 

5) Формы представления чисел в ЭВМ.

Одно и то же число может быть записано в различных формах

 

452,34 = 452340·10-3 = 0,0045234·105 = 0,45234·103

 

Естественная форма Нормальная форма

 

 

Машинным изображением числа называют его представление в разрядной сетке ЭВМ. Числа в ЭВМ также могут быть представлены в двух формах

 

1) Естественная (с фиксированной запятой ФЗ)

 

2) Нормальная или полулогарифмическая (с плавающей запятой ПЛЗ)

 

В форме с ФЗ в разрядной сетке выделяется строго определенное число разрядов для целой и для дробной частей числа. Левый (старший) разряд хранит признак знака (0 – "+", 1 – "-") и для записи числа не используется.



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

 

A = [A] · KA

 

где А – произвольное число

 

[A] – машинное изображение числа в разрядной сетке

 

KA - масштабный коэффициент.

 

С целью упрощения разработки программ запятую часто размещают сразу после знака числа, тогда -1< [A] <1, т.е. в ЭВМ хранятся только правильные дроби в диапазоне ±[A]min = 0,0000….1 = 2-n до ±[A]max = 0,1111….1 = 1 – 2-n (n – количество разрядов для хранения дробной части). Второй распространенный вариант – использование целочисленной арифметики, когда запятая фиксируется на правом краю разрядной сетки. При любом выборе места запятой максимальная абсолютная погрешность представления числа - единица младшего разряда разрядной сетки.

Для машинного представления чисел с ПЛЗ используют формулу [A] = m·2P, где m - мантисса (|m|<1), а р – порядок (целое число). В разрядной сетке выделяется определенное количество разрядов для хранения мантиссы и порядка с их знаками. Основание системы счисления (2) нигде не хранится, но используется при вычислениях.

 

 

Существуют форматы с другим размещением мантиссы и порядка в разрядной сетке.

Для каждого числа существует множество нормальных форм:

 

0,25 = 0,25·100= 0,025·101 = 0,0025·102

 

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



6)Машинные коды

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

Пример 2.11. Прямой код положительного (отрицательного) числа

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

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

Пример 2.12. Обратный код положительного (отрицательного) числа

 

Обратный код имеет несколько важных свойств:

· сложение положительного числа с его отрицательным значением в обратном коде дает машинную единицу обратного кода МЕобр = 1|111…111;

· нуль в обратном коде может быть как положительным - 0|000…000, так и отрицательным - 1|111…111 числом.

Неоднозначность в определении нуля в обратном коде является основной причиной того, что он не используется в современных ЭВМ.

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

Пример 2.13. Дополнительный код положительного (отрицательного) числа

Дополнительный код имеет несколько важных свойств:

· сложение дополнительных кодов положительного и отрицательного чисел дает машинную единицу дополнительного кода МЕдоп = МЕобр + 20 = 10|000…000;

· нуль в дополнительном коде имеет единственное представление.

Свое название дополнительный код получил, потому что для представления отрицательного числа в этом коде требуется дополнение прямого кода этого числа до МЕдоп.

7) Поразрядные операции.

Определение. Поразрядные операции – операции, которые осуществляются над одноименными разрядами чисел независимо от соседних разрядов.

Поразрядное дополнение – получение инверсного кода числа.

Набор x0x1…xn превращается в набор , где .

Поразрядное сложение - заключается в сложении одноименных разрядов чисел по модулю 2 в соответствии с правилом

 

0 + 0 = 0 , 1 + 0 =1, 0+ 1=1, 1 + 1= 0.

Применяется для сравнения двух чисел на равенство.

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

0 Ú 0 = 0 , 1 Ú 0 =1, 0 Ú 1=1, 1 Ú 1= 1.

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

0 Ù 0 = 0 , 1 Ù 0 =1, 0 Ù 1=1, 1 1= 1.

Применяются для модификации команд и чисел.

Операции сдвига.

Операции сдвига заключается в одновременном смещении цифр числа на фиксированное число разрядов влево или вправо.

Логический сдвиг – смещение всей числовой последовательности (слова ) включая разряд знака, при котором в освободившиеся при сдвиге k разрядов записываются нули.

k – константа сдвига.

Циклический сдвиг - смещение всей числовой последовательности (слова ), при котором, цифры выходящие за пределы разрядной сетки, снова вводятся в освобождающиеся позиции слова.

Арифметический сдвиг – сдвиг всей числовой последовательности (слова) без изменения позиции знака числа. Арифметический сдвиг может быть простой и модифицированный.

Простой сдвиг влево:

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

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

Допустимая величина сдвига определяется числом подряд стоящих единиц после запятой (точки ).

Простой сдвиг вправо:

для прямого кода – сдвигается только цифровая часть числа;

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

цифра знакового разряда перемещается в старший цифровой разряд и восстанавливается в знаковом разряде. Разряды выходящие за правую границу сетки теряются.

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

Операция нормализации.

Операция нормализации влево – каждый сдвиг мантиссы влево сопровождается вычитанием 1 из порядка числа.

Операция нормализации вправо – каждый сдвиг мантиссы вправо сопровождается увеличением на 1 порядка числа.

Сложение и вычитание целых двоичных чисел.

Рассматриваются операции над целыми числами со знаком, в диапазоне

где n – число разрядов сетки.

При сложении чисел, заданных дополнительным кодом, двоичная передача из разряда знака в формировании суммы не участвует. Результат представляется в дополнительном коде при условии что [ x + y ] не выходит за пределя допустимого диапазона.

[ x ]3 + [ y ]3 = [x + y ]3

Пример.

[ x]3 = 0.1001 [ x ]3 = 1.0111

[y ]3 = 1.1011 [ y ]3 = 1.1011

[ x+y]3 = 0.0100 [x +y ]3 = 1.0010

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

Пример.

[ x]2 = 1.0011 [ x ]2 = 1.0110

[y ]2 = 0.1110 [ y ]2 = 1.1011

[ x+y]2 = 0.0010 [x +y ]2 = 1.0010

Переполнение разрядной сетки.

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

Пример 1. [ x]3 = 0.1011 , [y ]3 = 0.1101 [ x+y]3 = (0)1.1000

Пример 2. [ x ]3 = 1.0101 , [ y ]3 = 1.0011 , [x +y ]3 = (1)0.0010

В первом примере перенос в знаковый разряд равен 1, а из знакового равен 0. Во втором примере перенос в знаковый разряд равен 0, а из знакового равен1. Это свидетельствует о переполнении разрядной сетки.

Операция вычитания.

Вычитание целых чисел произвольного знака можно свести к операции алгебраического сложения x - y = x + ( -y).

Для дополнительного и обратного кода получим

[ x]3 – [y ]3 = [ x]3 + [ y ]3 +1 = [ x – y ]3

[ x]2 – [y ]2 = [ x]2 + [ y ]2 = [ x – y ]2 ,

где [ y ] - означает инвертирование кода.

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

Пример.

x = 1001, [x]3 = 0.1001 [x]3 = 0.1001

 

y = -0011, [y]3 = 1.1101 [y]3 = 0.0010

[x -y ]3 =0.1001+ 0.0010+1 = 0.1100

[x -y ]3 = 0.1100

Пример.

x = -1001, [x]2 = 1.0110 [x]2 = 1.0110

y = -0100 , [y]2 = 1.1011 [y]2 = 0.0100

[x -y ]2 = 1.0110 - 0.0100 = 1.1010

 








Не нашли, что искали? Воспользуйтесь поиском по сайту:



©2015 - 2024 stydopedia.ru Все материалы защищены законодательством РФ.