Учебные материалы


Кодирование целых чисел в ЭВМ



Карта сайта p13335.su Кодирование целых чисел в ЭВМ. В ЭВМ в целях упрощения выполнения арифметических операций применяют специальные коды для представления чисел. Для представления двоичных чисел со знаком в ЭВМ применяют прямой, обратный и дополнительный коды. Код – целое число без знака, диапазон представления кодами чисел без знака разбивается на два под диапазона. Один из них представляет положительные числа., а другой - отрицательные. Обычно старший разряд указывает на знак представляемых чисел, остальные разряды воспринимаются как цифровые. Обозначения: Х – двоичное число. [X] – код двоичного числа, число без знака. n – число двоичных разрядов кода ( размер разрядной сетки для представления двоичного числа). Знаковый разряд – старший разряд сетки ( разряд с номером n-1, разряды нумеруются справа налево, начиная с 0,знаковый разряд в записи кода условно отделяется от цифровой части точкой.) Прямой код. Прямой код двоичного числа Х представленного в n – разрядной сетке, определяется как где Пример 1. Пусть Х = 111, Y = -11, n = 4, тогда код [X]1 = 0.111, [Y]1 = 1.011. Здесь (и далее ) в записи кода, точкой, условно отделяется знаковый разряд от цифровой части. Диапазон представляемых прямым кодом чисел 0 X < A. Положительные числа представляются кодами (числами без знака) 0<= [X ]1 < A, отрицательные A<= [X]1 < 2 A. Признаком представления положительных ( отрицательных ) чисел является наличие 0 (1) в старшем знаковом разряде. Из определения прямого кода следует, что нуль имеет два изображения: [+0]1 = 0.00000 … и [-0]1 = 1.0000….. В прямом коде цифру знакового разряда и цифровую часть числа нельзя рассматривать как единой целое. При арифметических операциях с числами в прямом коде отдельно выполняются действия с цифровой частью и со знаками. Выполнение операций сложения и вычитания чисел с разными знаками неудобно, поскольку прямой код не обеспечивает вычитания чисел сложением их кодов. Сложение чисел с одинаковыми знаками:

  • Складываются цифровые части кодов;
  • Сумме присваивается код знака слагаемых. Сложение чисел с разными знаками:
  • Определить большое по модулю число;
  • Произвести вычитание чисел;
  • Присвоить разности знак большего по модулю числа. Обратный код. Обратный код двоичного числа Х, в n- разрядной сетке, определяется как где В – величина наибольшего числа без знака размещающегося в n – разрядной сетке По определению обратный код отрицательного числа представляет собой дополнение модуля исходного числа до наибольшего числа без знака, помещающегося в разрядную сетку. Получение обратного кода двоичного числа сводится к инвертированию n – разрядного прямого кода модуля этого числа. Пример 2. Пусть X = -1 1 0, n = 4, [|X|]1 = 0 1 1 0, [X]2 = 1. 0 0 1. Диапазон представляемых обратным кодом чисел 0 <= | X | < A Дополнительный код. Дополнительный код двоичного числа Х, в n- разрядной сетке, определяется как где Диапазон представляемых дополнительным кодом чисел отличается от диапазона прямого или обратного кода. Для положительных чисел 0<= Х < A, а для отрицательных 0 < | X | <= A. Если рассматривать обратный и дополнительный коды как двоичные числа без знаков, то (7) Таким образом, дополнительный код отрицательного числа может быть получен из обратного кода прибавлением 1 к младшему разряду обратного кода. Пример 3. Пусть Х = -101, n = 4, [X]2 = 1. 0 10 , [X]3 = 1. 0 1 1. Арифметические основы ЭВМ. Поразрядные операции. Определение. Поразрядные операции – операции, которые осуществляются над одноименными разрядами чисел независимо от соседних разрядов. Поразрядное дополнение – получение инверсного кода числа. Набор 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

    Представление чисел с плавающей точкой.

    Представление чисел с плавающей точкой в общем случае имеет вид X = M*pt, где М – мантисса числа  Х, t – порядок, p – основание ( обычно целая степень числа 2). Мантисса и порядок представляются в системе счисления с основанием p. Знак числа совпадает со знаком мантиссы. Порядок t может быть положительным или отрицательным целым числом, определяет положение точки в числе Х. Для представления порядка применяют смещенный код. Для перехода к смещенному коду от дополнительного кода необходимо инвертировать знаковый разряд кода. Особенностью смещенного кода является то , что из [X1]см > [X2]см Þ X1 >X2. Это упрощает сравнение чисел со знаком, сводя его к сравнению представляющих их кодов (чисел без знака).Чтобы сформировать смещенный код числа , сначала выбирается длина битовой комбинации, а затем в порядке счета в обычной двоичной системе последовательно записываются все возможные комбинации, имеющие установленную длину. Кодовые значения ,получаемые при использовании трехразрядных битовых комбинаций приведены в таблице. Значение Комбинация битов 3 111 2 110 1 101 0 100 -1 011 -2 010 -3 001 -4 000 Для представления числа 0 выбирается битовая комбинация 100, с единицей в старшем разряде. Все последующие комбинации с единицей в старшем разряде будут представлять числа 1, 2, 3 соответственно. Предыдущие комбинации в обратном направлении используются для представления чисел -1, -2,-3, -4. Пример представления в котором для хранения числа используется один байт (восьмиразрядный формат). Способ разделения байта представлен ниже. Знак Смещенный порядок Модуль мантиссы (двоичный ) 7 6..4 3 …0 Задача 1. Восстановить число представленное битовой комбинаций на восьмиразрядном формате. Пусть байт содержит битовую комбинацию 01101011. При разложении этой комбинации по элементам формата получим: знаковый бит - 0; поле порядка  - 110; поле мантиссы - 1011. Выделим мантиссу и поместим плавающую точку слева от нее - .1011. Значение в поле порядка интерпретируем как целое трехразрядное число, записанное в смещенном коде. Согласно таблицы это будет - 2. Плавающую точку в записи мантиссы нужно переместить на два разряда вправо - 10.11. Ответ 10.11 или  2 3/4. Задача 2. Представить число  1 1/8 в виде двоичной комбинации на восьми разрядной сетке. Решение. Запишем число в двоичной системе - 1.001. Скопируем эту битовую комбинацию в поле мантиссы начиная с самой левой единицы двоичного представления числа, получим _ _ _ _ 1 0 0 1 Определим порядок числа. Необходимо определить число разрядов и направление в котором будет перемещаться плавающая точка для получения исходного значения двоичного числа. В нашем случае точка должна быть перемещена на один бит вправо. В этом случае порядок равен 1, ему соответствует смещенный код 101. Ответ будет иметь вид 0 1 0 1 1 0 0 1 При заполнении мантиссы требуется копировать битовую комбинацию двоичного представления числа в поле мантиссы слева направо , начиная с левой крайней единицы.  Например кодирование числа 3/8 двоичное представление этого числа имеет вид 0.011. В этом случае мантисса должна иметь следующий вид _ _ _ _ 1 1 0 0

     Ошибки усечения.

    Задача 3. Представить число 2 5/8  в виде однобайтового кода в двоичной нотации с плавающей точкой. Решение. Определяем двоичное представление числа - 10.101. Копируем эту комбинацию в поле мантиссы. Четырех разрядов нехватает, получим _ _ _ _ 1 0 1 0 Теряется самая правая единица имеющая весовое значение  1/8. Если продолжить процесс кодирования то получим битовую комбинацию 0 1 1 0 1 0 1 0 , которая представляет число 2 1/2. Это называется ошибкой усечения. Некоторая часть кодируемого числа теряется , поскольку размер мантиссы оказывается недостаточным. Задача 4. Сложить три числа, представленных в однобайтовых кодах двоичной нотации с плавающей точкой. 2 1/2 + 1/8 + 1/8. Решение. Если суммировать в числа в указанном порядке, при сложении 2 1/2 + 1/8 = 2 5/8 Это число не может быть представлено точно, в результате будет получено число 2 1/2. Если прибавить к полученному результату следующее число 1/8, то опять возникнет ошибка усечения и будет получен неверный ответ = 2 1/2. Выполним сложение в обратном порядке. 1/8 + 1/8 = 1/4. Двоичное представление 0.01 соответствующий байт результата будет иметь вид 0 0 1 1 1 0 0 0. Выполним сложение 2 1/2 + 1/4 = 2 3/4. Двоичное представление 10.11, соответствующий байт результата будет иметь вид 0 1 1 0 1 0 1 1. Получили точное значение. Вывод. При сложении чисел большое значение может иметь порядок в котором они суммируются. Если к большому числу прибавить маленькое, то маленькое число может быть утеряно в результате усечения. Поэтому при сложении большого количества чисел нужно начинать сложение с самых малых чисел. Предварительно числа нужно упорядочить по неубыванию.


  • edu 2018 год. Все права принадлежат их авторам! Главная