13772

Системы счисления и перевод между ними

Реферат

Математика и математический анализ

Оглавление Системы счисления Двоичная система счисления 8ая система счисления 16ая система счисления Перевод чисел из одной системы счисления в другую Перевод из 2ой системы в 10ую Пер...

Русский

2013-05-13

233 KB

278 чел.

Оглавление

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

Двоичная система счисления

8-ая система счисления

16-ая система счисления

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

Перевод из 2-ой системы в 10-ую

Перевод из 8-ой системы в 10-ую

Перевод из 16-ой системы в 10-ую

Перевод из 10-ой системы в 2-ую

Перевод из 10-ой системы в 8-ую

Перевод из 10-ой системы в 16-ую

Перевод из 2-ой системы в 8-ю или 16-ю и обратно 14

Примеры двоичного кодирования информации 15

Кодирование чисел 15

Кодирование целых чисел 16

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

Умножение и деление 21

Кодирование вещественных чисел 22

Арифметические операции с числами в формате с плавающей запятой 24

Двоично-десятичное кодирование информации 25

Преимущества и недостатки 25

 

Двоичная система счисления

В двоичной (binary) системе счисления всего две цифры, называемые двоичными (binary digits). Сокращение этого наименования привело к появлению термина бит, ставшего названием разряда двоичного числа. Веса разрядов в двоичной системе изменяются по степеням двойки. Поскольку вес каждого разряда умножается либо на 0, либо на 1, то в результате значение числа определяется как сумма соответствующих значений степеней двойки. Если какой-либо разряд двоичного числа равен 1, то он называется значащим разрядом. Запись числа в двоичном виде намного длиннее записи в десятичной системе счисления.

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

0 + 0 = 0 0 + 1 = 1

1 + 0 = 1 1 + 1 = 10 (перенос в старший разряд)

Таблица умножения для двоичных чисел еще проще:

0 * 0 = 0 0 * 1 = 0 1 * 0 = 0 1 * 1 = 1

Пример выполнения операции сложения в двоичной системе счисления:

1  1  1

1 0 1 12      Красным цветом показан перенос из младших разрядов в

 + 1 1 02      старшие

1 0 0 0 12

Для проверки правильности выполнения операции переведем все три числа из двоичной системы в 10-ую:

1011 = 1*23 + 1*21  + 1 = 8 + 2 + 1 = 1110

3 2 1 0

110 = 1*22 + 1*21   = 4 + 2 = 610

2 1 0

10001 = 1*24 + 1 = 16  + 1 = 1710

4 3 2 1 0

Сумма первых двух чисел (11 и 6) равна третьему числу (17), следовательно операция выполнена верно.

Обратите внимание на то, что при добавлении к числу, состоящему из единиц (11…1), еще одной единицы, получается число, равное 1 с количеством нулей, равным количеству единиц исходного числа, например:

1111 11112 + 1 = 1 0000 00002 = 28

Пример выполнения операции вычитания в двоичной системе счисления:

Вычитание выполняется по тем же правилам, что и в 10-ой системе, но в 10-й системе при заеме единицы старшего разряда она превращается в 10 единиц младшего разряда, а в 2-й системе – в 2 единицы. Если нужно произвести заем не в соседнем разряде, а далее влево, то из каждых двух единиц текущего разряда одна остается в этом разряде, а вторая передается вправо. Сравните:

    9  9 10                                        1  1   2

1 0 0 010                       1 0 0 02

-        1                          -        1

9 9 910                           1 1 12

Выполним в 2-й системе счисление вычитание 1710 – 610 :

0   1  1  2

1 0 0 0 12

-       1 1 02

1 0 1 12 = 1110  Проверка показывает, что вычитание выполнено верно.

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

28 - 1 = 1 0000 00002 – 1 = 1111 11112

1023 = 1024 – 1 = 210 – 1 = 11 1111 11112

Пример выполнения операции умножения в двоичной системе счисления:

1 1 0 12 = 1310

*    1 0 12  =  510

1 1 0 1

+1 1 0 1

1 0 0 0 0 0 12 = 26 +1 = 64 +1 =6510          ( 13 * 5 = 65)

6   5    4   3    2   1   0

Рассмотрим подробнее, как процессор выполняет умножение двоичных чисел. Пусть надо умножить число 1101 на 101 (оба числа в двоичной системе счисления). Машина делает это следующим образом: она берет число 1101 и, если первый справа элемент второго множителя равен 1, то она заносит его в сумму. Затем сдвигает число 1101 влево на одну позицию, получая тем самым 11010, и, если, второй элемент второго множителя равен единице, то добавляет его к сумме. Если элемент второго множителя равен нулю, то сумма не изменяется. Этот процесс сдвигов и сложений повторяется.

Пример выполнения операции деления в двоичной системе счисления:

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

В качестве примера разделим 14310 = 100011112 на 1310 = 11012

1 0 0 0 1 1 1 1  1 1 0 1

- 1 1 0 1           1 0 1 12 = 1110

1 0 0 1 1

- 1 1 0 1

1 1 0 1

- 1 1 0 1

0

Проверка показывает, что деление выполнено верно (143 / 13 = 11).

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

10112 * 102 = 101102.

10112 / 102 = 101.12.

8-ая система счисления

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

Для облегчения восприятия двоичного числа решили разбивать его на группы разрядов, например, по три или четыре разряда. Эта идея оказалась очень удачной, так как последовательность из трех бит имеет 8 комбинаций, а последовательность из 4 бит - 16. Числа 8 и 16 являются степенями двойки, поэтому легко находить соответствие с двоичными числами. Развивая эту идею, пришли к выводу, что группы разрядов можно закодировать, сократив при этом длину последовательности знаков. Для кодировки трех битов требуется восемь цифр, поэтому взяли цифры от 0 до 7 десятичной системы. Для кодировки же четырех битов необходимо шестнадцать знаков; для этого взяли 10 цифр десятичной системы и 6 букв латинского алфавита: A, B, C, D, E, F. Полученные системы, имеющие основания 8 и 16, назвали соответственно восьмеричной и шестнадцатеричной.

В восьмеричной (octal) системе счисления используются восемь различных цифр: 0, 1, 2, 3, 4, 5, 6, 7. Основание системы - 8. При записи отрицательных чисел перед последовательностью цифр ставят знак минус. Сложение, вычитание, умножение и деление чисел, представленных в восьмеричной системе, выполняются весьма просто, подобно тому, как это делают в общеизвестной десятичной системе счисления.

Пример выполнения операции сложения в восьмеричной системе счисления:

1   1                     Красным цветом показан перенос из младших разрядов в старшие.

4 7 6                  Выполнение операции в каждом разряде:

+  3 4               1) 6 + 4 = 10 = 1*8 + 2 = 128   

5 3 2                2) 1 + 7 + 3 = 1*8 + 3 = 138  

                   3) 1 + 4 = 5

Проверим результат путем перевода чисел в десятичную систему счисления :

4768 = 4*82 + 7*8 + 6 = 318                        318

348 = 3*8 + 4 = 28                                        +28

532 = 5*82 + 3*8 + 2 = 346                          346

Пример выполнения операции вычитания в восьмеричной системе счисления:

    7  8                     Красным цветом показан перенос из старших разрядов в младшие.

5 3 2                  Выполнение операции в каждом разряде:

-   3 4               1) 8 + 2 – 4 = 6   

4 7 6                2) 7 + 2 - 3 = 1*8 + 3 = 138  

   3) 1 + 4 = 5

Пример выполнения операции умножения в восьмеричной системе счисления:

 5 4                             54              4*4 = 16 = 2*8 + 0 = 208 (записываем 0)

* 3 4                           *   4             2+ 5*4 = 22 = 2*8 + 6 = 268

   2 6 0                            260

 + 2 0 4                          

  2 3 2 0                             54              4*3 = 12 = 1*8 + 4 = 148 (записываем 4)

                                          *   3                      1 + 5*3 = 16 = 2*8 + 0 = 208

                                         204

Выполним проверку:

548 = 5*8 + 4 = 4410                                               44

348 = 3*8 + 4 = 2810                                                        *   28

23208 = 2*83 + 3*82 + 2*8  = 123210                              352

                                                                          + 88      = 123210

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

      2 3 2 08         5 48

      - 2 0 4          3 48

   2 6 0

-  2 6 0

   0

Деление в восьмеричной системе близко делению в десятичной системе: нужно подобрать цифры частного. 232 делим на 54, в десятичной системе мы получили бы целое частное 4, но из предидущего примера мы знаем, что в восьмеричной системе 54*4 = 260, это много, попробуем взять цифру поменьше – 3, умножаем 54*3 = 204, эта цифра подходит, и т.д.

В различных языках программирования запись восьмеричных чисел начинается с 0, например, запись 011 означает десятичное число 9.

16-ая система счисления

В шестнадцатеричной (hexadecimal) системе счисления применяются десять цифр от 0 до 9 и шесть первых букв латинского алфавита:

10 – A     11 – B     12 – C     13 – D     14 – E     15 – F.

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

Для того чтобы при написании компьютерных программ отличить числа, записанные в шестнадцатеричной системе, от других, перед числом ставят 0x. То есть 0x11 и 11 - это разные числа.

Шестнадцатеричная система счисления широко используется при задании различных оттенков цвета при кодировании графической информации (модель RGB). Так, в редакторе гипертекста Netscape Composer можно задавать цвета для фона или текста как в десятичной, так и шестнадцатеричной системах счисления (см. рисунок).

Пример выполнения операции сложения в 16-ой системе счисления:

1   1                                      Красным цветом показан перенос из младших разрядов

A 7 B16                        Выполнение операции в каждом разряде:      

+  C 816                                 B + 8 = 11 + 8 = 19 = 1*16 + 3 = 1316 (записываем 3)

 B 4 316                                1+7+С = 8+12 = 20 = 1*16 + 4  = 1416  (записываем 4)

                               1 + A = B

Проверим резульат путем перевода чисел в 10-ю систему:

A7B16 = 10*162 + 7*16 +11 = 2683         

2  1  0                                                                                                                                   2683

C816 = 12*16 + 8 = 200                                           + 200

1  0                                                                                                                                      2883

B4316 = 11*162 + 4*16 +3 = 2883                          

2  1  0

Пример выполнения операции вычитания в 16-ой системе счисления:

 

   15 16                                        Красным цветом показан заем из старших разрядов

B 4 316                                  Выполнение операции в каждом разряде:      

    -  A 7 B16                                 16 + 3 – B = 19 -11 = 8

    C 816                                  15 + 4 – 7 = 12 = C

                                B - 1 – A = 0

Умножение и деление в 16-ой системе обычно не выполняется ввиду сложности вычислений.

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

Перевод числа из системы счисления с основанием q в 10-ю систему счисления выполняется путем вычисления значения многочлена по степеням q, коэффициенты которого равны цифрам числа.

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

Перевод из 2-ой системы в 10-ую

1 0 1 1 . 1 0 12 = 1*23 + 0*22 + 1*2 + 1*20 + 1*2-1+ 0* 2-2 + 1*2-3 =

3  2   1   0      -1  -2  -3

= 8 + 2 + 1 + 0.5 + 0.125 = 11.625

Для того, чтобы быстро переводить числа из двоичной системы счисления в 10-ую, необходимо запомнить степени двойки : 2, 4, 8, 16, 32, 64, 128, 256, 512, 1024 и т.д. Отрицательные степени двойки: .5, .25, .125, .0625, .03125 и т.д.

Перевод из 8-ой системы в 10-ую

6 3 2.4 58 = 6*82 + 3*8 + 2 + 4* 8-1 + 5*8-2 = 6*64 + 24 + 2 +4/8 + 5/64 =

2   1   0  -1  -2

= 410.578125

Перевод из 16-ой системы в 10-ую

E 7 F.816 =  14*162 + 7*16 + 15 + 8/16 = 14*256 + 7*16 + 15 + .5 = 3711.5

2    1    0    -1

Перевод из 10-ой системы в 2-ую

Перевод из 10-ой системы целой и дробной частей выполняется по различным алгоритмам, поэтому будем рассматривать их отдельно.

Перевод целой части

Пусть требуется перевести число 567 из десятичной в двоичную систему. Сначала определим максимальную степень двойки, такую, чтобы два в этой степени было меньше или равно исходному числу. В нашем случае это 9, т. к. 29=512, а 210=1024, что больше начального числа. Таким образом, мы получим число разрядов результата. Оно равно 9+1=10. Поэтому результат будет иметь вид 1ххххххххх, где вместо х могут стоять любые двоичные цифры. Найдем вторую цифру результата. Возведем двойку в степень 9 и вычтем из исходного числа: 567-29=55. Остаток сравним с числом 28=256. Так как 55 меньше 256, то девятый разряд будет нулем, т. е. результат примет вид 10хххххххх. Рассмотрим восьмой разряд. Так как 27=128>55, то и он будет нулевым.

Седьмой разряд также оказывается нулевым. Искомая двоичная запись числа принимает вид 1000хххххх. 25=32<55, поэтому шестой разряд равен 1 (результат 10001ххххх). Для остатка 55-32=23 справедливо неравенство 24 = 16 < 23, что означает равенство единице пятого разряда. Действуя аналогично, получаем в результате число 1000110111. Мы разложили данное число по степеням двойки:

567=1*29 + 0*28 + 0*27 + 0*26 + 1*25 + 1*24 + 0*23 + 1*22 + 1*21 + 1*20

При другом способe перевода чисел используется операция деления в столбик. Рассмотрим то же самое число 567. Разделив его на 2, получим частное 283 и остаток 1. Проведем ту же самую операцию с числом 283. Получим частное 141, остаток 1. Опять делим полученное частное на 2, и так до тех пор, пока частное не станет меньше делителя. Теперь для того, чтобы получить число в двоичной системе счисления, достаточно записать последнее частное, то есть 1, и приписать к нему в обратном порядке все полученные в процессе деления остатки.

Результат, естественно, не изменился: 567 в двоичной системе счисления записывается как 1000110111.

Поскольку делить на 2 несложно, этот процесс можно записать более компактно:

Частное | Остаток

       567 | 1                  567 = 10001101112

       283 | 1

       141 | 1

         70 | 0

         35 | 1

         17 | 1

           8 | 0

           4 | 0

           2 | 0

           1 | 1

           0

Перевод дробной части

Алгоритм перевода дробной части:

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

Примеры:

  1.  перевести 0.65625 в 2-ю систему счисления.

Умножаем дробную часть на 2:

целая часть        дробная часть

произведения    произведения

              65625

       1       3125

       0       625         Умножаем только дробную часть!

       1       25

       0       5

       1       0

0.65625 = 0.101012

  1.  перевести 0.1 в 2-ю систему счисления.

Умножаем дробную часть на 2:

целая часть        дробная часть

произведения    произведения

                           1

                  0       2       Умножаем только дробную часть!

                  0       4        С этого места процесс повторяется

                  0       8

                  1       6

                  1       2

        0       4

                  0       8

        1       6          

                  1       2

                     . . .

  1.  = 0. 0 0011 0011 0011 …

В результате перевода большинства десятичных чисел, имеющих дробную часть, получается число с бесконечной дробью, поэтому действительные (вещественные) числа в компьютере хранятся не точно!

Перевод из 10-ой системы в 8-ую

Перевод целой части

Алгоритм перевода из десятичной системы в систему счисления с основанием q путем деления и записи остатков в обратном порядке более удобен, поэтому для перевода числа в 8-ю и 16-ую системы мы будем использовать его.

Рассмотрим перевод числа 567 в систему счисления с основанием 8.

567 = 10678

Перевод дробной части

Переведем 0.65625 в 8-ю систему счисления.

Умножаем дробную часть на 8:

целая часть        дробная часть

произведения    произведения

              65625

       5       25           Умножаем только дробную часть!

       2       0

0.65625 = 0.528

Перевод из 10-ой системы в 16-ую

Перевод целой части

Делим число на 16 и записываем остатки в обратном порядке:

В шестнадцатеричной системе счисления необходимо заменить 10 на A, 11 на B и так далее.

Перевод дробной части

Переведем 0.65625 в 16-ю систему счисления.

Умножаем дробную часть на 16:

целая часть        дробная часть

произведения    произведения

              65625

    10(A)    5           Умножаем только дробную часть!

        8       0

0.65625 = 0.A816

Перевод из 2-ой системы в 8-ю или 16-ю и обратно

Пожалуй, проще всего осуществляется перевод чисел из двоичной системы в системы с основанием, равным степеням двойки (8 или 16), и наоборот. Для того чтобы целое двоичное число записать в системе счисления с основанием 2n, нужно

  •  данное двоичное число разбить на группы по n-цифр в каждой справа налево в целой части и слева-направо в дробной;
  •  если в последней группе окажется меньше n разрядов, то дополнить ее нулями до нужного числа разрядов;
  •  рассмотреть каждую группу, как n-разрядное двоичное число, и заменить ее соответствующей цифрой в системе счисления с основанием 2n.

Таблица перевода из двоичной системы в 16-ю и обратно

Десятичное значение

Двоичный код

Шестнадцате-ричная цифра

0

0000

0

1

0001

1

2

0010

2

3

0011

3

4

0100

4

5

0101

5

6

0110

6

7

0111

7

8

1000

8

9

1001

9

10

1010

A

11

1011

B

12

1100

C

13

1101

D

14

1101

E

15

1111

F

Часть таблицы, выделенная бирюзовым, может использоваться для перевода из 2-й системы в 8-ю и обратно.

Примеры:

  1.  Переведем число 11101.001112 из двоичной системы в восьмеричную.

Разбиваем двоичное число на тройки цифр:

11101.001112 = 011 101.001 1102 = 35.168

Заменяем каждую тройку двоичных цифр соответствующей 8-й цифрой (см. таблицу).

Для перевода числа из 8-й системы счисления в 2-ю нужно каждую 8-ю цифру заменить тройкой двоичных цифр (рассмотрите тот же пример справа-налево).

  1.  Переведем число 10000.1101112 в 16-ю систему.

Разбиваем двоичное число на четверки цифр:

10000.1101112 = 0001 0000.1101 11002 = 10.DC16

Заменяем каждую четверку двоичных цифр соответствующей 16-й цифрой (см. таблицу).

Для перевода числа из 16-й системы счисления в 2-ю нужно каждую 16-ю цифру заменить четверкой двоичных цифр (рассмотрите тот же пример справа-налево).

Примеры двоичного кодирования информации

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

Кодирование чисел

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

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

Множество целых чисел, представимых в памяти ЭВМ, ограничено. Диапазон значений зависит от размера области памяти, используемой для размещения чисел. В k-разрядной ячейке может храниться 2k различных значений целых чисел.

Целые числа могут занимать 1, 2, 4 или 8 байт (для 64-разрядных машин).

Чтобы получить внутреннее представление целого положительного числа N, хранящегося в k-разрядном машинном слове, необходимо:

1. перевести число N в двоичную систему счисления;

2. полученный результат дополнить слева незначащими нулями до k разрядов.

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

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

Пример:

Число 107 = 11010112 будет записано:

в 1 байт как     01101011

в 2 байта как   00000000  01101011

                        1-й байт               0-й байт

в 4 байта как   00000000 00000000 00000000  01101011

                        3-й байт               2-й байт      1-й байт               0-й байт

Минимальное беззнаковое число равно 0. Максимальное беззнаковое число равно 2n – 1, где n – кол-во двоичных разрядов, используемых для записи числа.

Например для 2-хбайтового представления max =11111111 111111112 =
1 00000000 00000000 – 1 = 2
16 – 1  = 65 535

Для записи чисел со знаком старший (левый) разряд отводится под знак числа. Если число неотрицательное, то в знаковый разряд записывается 0, в противном случае – 1, т.е. единица в знаковом разряде означает знак “минус”.

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

В прямом коде число хранится в виде: знак+абсолютное значение (модуль) числа.

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

Дополнительный код получают путем прибавления 1 к обратному.

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

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

Пример. Рассмотрим внутреннее представление целого отрицательного числа:  -6 = 1102.

Однобайтовое:

Прямой код:           1000 0110

Обратный код:       1111 1001

Дополнительный:  1111 1001

                                            + 1

                               1111 1010

Четырехбайтовое:

Прямой код:           10000000 00000000 00000000  00000110

Обратный код:       1111111   1111111   11111111  11111001

Дополнительный:  1111111   1111111   11111111  11111001

                                                                                               + 1

                               1111111   1111111   11111111  11111010

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

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

2) сначала заменить все нули на единицы, единицы на нули, затем прибавить единицу к результату.

Пример: возьмем однобайтовый доп. код : 1111 1010 и используем второй алгоритм:   1111 1010 -- > - (0000 0101 + 1) = - 1102 = -6.

Диапазон значений знаковых чисел

Рассмотрим однобайтовое представление. Возможные дополнительные коды знаковых чисел:

0111 1111

. . .

0000 0001

0000 0000

1111 1111

1111 1110      Отрицательные числа  

. . .

1000 0000

Рассмотрим десятичные значения этих чисел:

0111 1111 = 27 – 1 = 128 - 1 = 127

0000 0001 = 1

0000 0000 = 0

1111 1111 -> -(000 0000 + 1) = -1

1111 1110 -> -(000 0001 + 1) = -2

1000 0000 -> -(111 1111 + 1) = -(1000 0000) = -27 = -128

Таким образом диапазон значений знаковых однобайтовых чисел:
от -128 до 127.

Аналогично, диапазон значений двухбайтовых целых чисел:
-2
15 - +(215 -1) (от -32768  до 32767).

Диапазон значений четырехбайтовых целых чисел со знаком:
-2
31 - +(231 – 1) (от -2 147 483 648 до 2 147 483 647)

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

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

Сложение обратных кодов. Здесь при сложении чисел А и В имеют место четыре основных и два особых случая:

1. А и В положительные. При суммировании складываются все разряды, включая разряд знака. Так как знаковые разряды положительных слагаемых равны нулю, разряд знака суммы тоже равен нулю. Например:

Получен правильный результат.

2. А положительное, B отрицательное и по абсолютной величине больше, чем А. Например:

Получен правильный результат в обратном коде. При переводе в прямой код биты цифровой части результата инвертируются: 1 0000111 = –710.

3. А положительное, B отрицательное и по абсолютной величине меньше, чем А. Например:

Компьютер исправляет полученный первоначально неправильный результат (6 вместо 7) переносом единицы из знакового разряда в младший разряд суммы.

4. А и В отрицательные. Например:

Полученный первоначально неправильный результат (обратный код числа –1110 вместо обратного кода числа –1010) компьютер исправляет переносом единицы из знакового разряда в младший разряд суммы. При переводе результата в прямой код биты цифровой части числа инвертируются: 1 0001010 = –1010.

Переполнение

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

5. А и В положительные, сумма А+В больше, либо равна 2n–1, где n — количество разрядов формата чисел (для однобайтового формата n=8, 2n–1 = 27 = 128). Например:

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

Семи разрядов цифровой части числового формата недостаточно для размещения восьмиразрядной суммы (16210 = 101000102), поэтому старший разряд суммы оказывается в знаковом разряде. Это вызывает несовпадение знака суммы и знаков слагаемых, что является свидетельством переполнения разрядной сетки.

6. А и В отрицательные, сумма абсолютных величин А и В больше, либо равна 2n–1. Например:

В результате сложения отрицательных чисел получен результат > 0!

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

Сложение дополнительных кодов. Здесь также имеют место рассмотренные выше шесть случаев:

1. А и В положительные. Здесь нет отличий от случая 1, рассмотренного для обратного кода (коды неотрицательных чисел совпадают).

2. А положительное, B отрицательное и по абсолютной величине больше, чем А. Например:
 


Получен правильный результат в дополнительном коде. При переводе в прямой код биты цифровой части результата инвертируются и к младшему разряду прибавляется единица: 1 0000110 + 1 = 1 0000111 = –7
10.

3. А положительное, B отрицательное и по абсолютной величине меньше, чем А. Например:

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

4. А и В отрицательные. Например:
 

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

Случаи переполнения

Для обнаружения переполнения разрядной сетки знаковый разряд дублируется. Такое представление чисел называется модифицированным дополнительным кодом:

1)     65                   00 100 0001

         + 97                +  00 110 0001

     162                    01 010 0010

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

2)     -65                   11 011 1111

         + -97                +  11 001 1111

     -162                   10 101 1110

                      Переполнение!

Для проверки знаковых разрядов используют результат операции “исключающее ИЛИ”, которая дает значение 1 только если операнды различны.

Сравнение рассмотренных форм кодирования целых чисел со знаком показывает:

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

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

Умножение и деление

Во многих компьютерах умножение производится как последовательность сложений и сдвигов. Для этого в АЛУ имеется регистр, называемый накапливающим сумматором, который до начала выполнения операции содержит число ноль. В процессе выполнения операции в нем поочередно размещаются множимое и результаты промежуточных сложений, а по завершении операции — окончательный результат.

Другой регистр АЛУ, участвующий в выполнении этой операции, вначале содержит множитель. Затем по мере выполнения сложений содержащееся в нем число уменьшается, пока не достигнет нулевого значения.

Для иллюстрации умножим 1100112 на 1011012.

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

Кодирование вещественных чисел

Формат с плавающей точкой использует представление вещественного числа R в виде произведения мантиссы m на основание системы счисления q в некоторой целой степени p, которую называют порядком: R = m * q p.

Представление числа в форме с плавающей точкой неоднозначно. Например, справедливы следующие равенства:

12.345 = 0.0012345 * 104 = 1234.5 * 10-2 = 0.12345 * 102

Чаще всего в ЭВМ используют нормализованное представление числа в форме с плавающей точкой. Мантисса в таком представлении должна удовлетворять условию: 0.1p <= m < 1. Иначе говоря, мантисса должна быть меньше 1 и первая значащая цифра - не ноль (p - основание системы счисления).

В памяти компьютера мантисса представляется как целое число, содержащее только значащие цифры (0 целых и запятая не хранятся), так для числа 12.345 в ячейке памяти, отведенной для хранения мантиссы, будет сохранено число 12345. Для однозначного восстановления исходного числа остается сохранить только его порядок, в данном примере - это 2.

Диапазон и точность представления чисел зависят от числа разрядов, отводимых под порядок и мантиссу. Обычно число в формате с плавающей запятой занимает в памяти 4 (float) или 8 (double) байтов.

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

Числа с плавающей запятой в разных вычислительных машинах (ВМ) имеют различные форматы. В настоящее время для всех ВМ рекомендован стандарт, разработанный международным центром стандартизации IEEE (Institute of Electrical and Electronics Engineers).

Стандарт IEEE 754

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

Рис. 2.24. Основные форматы IEEE 754: а — одинарный; б — двойной

Стандарт определяет 32-битовый (одинарный) и 64-битовый (двойной) форматы (рис. 2.24) с 8- и 11-разрядным порядком соответственно. Самый левый бит хранит знак числа. Основанием системы счисления является 2.

Смещение равно соответственно 127 и 1023.

Максимальный порядок, который может иметь число: 127 и 1023.

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

Пример: рассмотрим 4-хбайтовый код числа 20.5:

20.5 = 10100.12 = 0.101001 * 25

Порядок (смещенный): 5+127 = 132 = 1000 01002

Мантисса: 101001 010010…0 (первая единица – скрытая, в конец мантиссы добавляются нули).

4-хбайтовое представление:

0

1

0

0

0

0

1

0

0

0

1

0

0

1

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

             порядок                                        мантисса

В 16-ом виде этот код будет выглядеть так: 42240000.

Определим максимальное число и его точность при 4-хбайтовом представлении.

Максимальное число:

.1…1 * 2127 = 1 * 2127 = 1.7 * 1038

Максимальное значение мантиссы:

1…1 (24 единицы)  = 224 – 1 = 210*2.4 = 10242.4 = 1.7*107, следовательно точность представления мантиссы 7-8 значащих цифр.

Арифметические операции с числами в формате с плавающей запятой

Сложение и вычитание

Производятся в несколько этапов:

  1.  Выравниваются порядки чисел в сторону большего (чтобы не получить мантиссы  > 1)
  2.   Складываются мантиссы. Для представления отрицательных чисел используется модифицированный дополнительный код. Порядок суммы будет равен общему порядку слагаемых.
  3.  Нормализуется результат: порядок и мантисса изменяются так, чтобы первая значащая цифра результата попала в первый разряд после запятой.

Пример 1: Вычесть из числа A = 20.0  число B = 11.0.

A = 20 = 101002 = .101 * 25 = .101 * 10101 (все числа –двоичные)

B = 11 = 10112 = .1011 * 24 = .1011 * 10100

Процессор для определения разности порядков вычитает из порядка числа A порядок числа B и получает 1. Т.к. порядок числа A на единицу больше порядка числа B, порядок числа B увеличивается на 1 и мантисса при этом сдвигается на 1 разряд вправо относительно точки:

B = .01011 * 10101

Мантисса числа B должна быть записана как отрицательное число (нужно выполнить вычитание):

B = -010110…0 = 1|101001…1 = 1|101010…0

                              Обратный код            Дополнительный

Сложение мантисс в модифицированном дополнительном коде:

00| 1010 00…0   (число A)

     +  11| 1010 10…0   (число B)

    1| 00| 0100 10…0   (сумма, порядок = 1012)

     

Произошло нарушение нормализации.

Нормализация результата: мантисса сдвигается влево, порядок уменьшается:    A - B = .1001* 10100 = 10012 =  9.0

Пример 2: Сложить A = 5.0  и  B = 28.0.

A = 5 = 1012 = .101 * 25 = .101 * 1011 (все числа –двоичные)

B = 28 = 111002 = .111 * 25 = .111 * 10101

Процессор для определения разности порядков вычитает из порядка числа A порядок числа B и получает -2. Т.к. порядок числа A на 2 меньше порядка числа B, порядок числа A увеличивается на 2 и мантисса при этом сдвигается на 2 разряда вправо относительно точки:

A = .00101 * 10101

Сложение мантисс в модифицированном коде:

00| 0010 10…0   (число A)

     +  00| 1110 00…0   (число B)

        01| 0000 10…0   (сумма, порядок = 1012)

     

Произошло нарушение нормализации.

Нормализация результата: мантисса сдвигается вправо, порядок увеличивается:    A + B = .100001* 10110 = 1000012 =  33.0

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

Умножение и деление

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

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

Двоично-десятичное кодирование информации

Двоично-десятичный код — ( binary-coded decimal [BCD] ) форма записи целых чисел, когда каждый десятичный разряд числа записывается в виде его четырёхбитного двоичного кода (вместо каждой десятичной цифры записывают ее двоичное значение). Например, десятичное число 310 будет записано в двоичном коде как 1001101102, а в двоично-десятичном коде как 0011 0001 0000BCD.

Преимущества и недостатки

Преимущества

  •  Упрощён вывод чисел на индикацию — вместо последовательного деления на 10 требуется просто вывести на индикацию каждый полубайт. Аналогично, проще ввод данных с цифровой клавиатуры.
  •  Для дробных чисел (как с фиксированной, так и с плавающей запятой) при переводе в человекочитаемый десятичный формат и наоборот не теряется точность.
  •  Упрощены умножение и деление на 10, а также округление.

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

Недостатки

  •  Усложнены арифметические операции.
  •  Требует больше памяти.
  •  В двоично-десятичном коде BCD существуют запрещённые комбинации битов:

Запрещённые в BCD битовые комбинации:

1010  1011  1100  1101  1110  1111


Запрещённые комбинации возникают обычно в результате операций сложения, так как в BCD используются только 10 возможных комбинаций 4-х битового поля вместо 16. Поэтому, при сложении и вычитании чисел формата BCD действуют следующие правила:

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

Пример операции сложения двоично-десятичных чисел:

Требуется: Найти число A = D + C, где D = 3927, C = 4856

Решение: Представим числа D и C в двоично-десятичной форме: D = 3927 = 0011 1001 0010 0111  C = 4856 = 0100 1000 0101 0110

Суммируем числа D и С по правилам двоичной арифметики:


       *         **

 0011 1001 0010 0111

+ 0100 1000 0101 0110

 ___________________

= 1000 0001 0111 1101 - Двоичная сумма

+      0110      0110 - Коррекция

 ___________________

 1000 0111 1000 0011

'*' — тетрада, из которой был перенос в старшую тетраду

'**' — тетрада с запрещённой комбинацией битов

В тетраду, помеченую символом *,  добавляем шестёрку т.к по правилам двоичной арифметики перенос унёс с coбой 16, а по правилам десятичной арифметики должен был унести 10. В тетраду, помеченую символом ** , добавляем шестёрку, так как комбинация битов 1101 (что соответствует десятичному числу 13) является запрещённой.


Знак


 

А также другие работы, которые могут Вас заинтересовать

13036. Исследование процессов амплитудной модуляции и детектирования амплитудно-модулированных колебаний 208 KB
  Лабораторная работа № 11. Цель работы: исследование процессов амплитудной модуляции и детектирования амплитудно-модулированных колебаний; знакомство со схемами простого радио-передающего и радиоприемного устройств. Приборы: 1. Испытательная панель лаб...
13037. Теплотехника. Методические указания к выполнению лабораторных работ 639.5 KB
  Методические указания к выполнению лабораторных работ по дисциплине Теплотехника для студентов специальностей Методические указания к выполнению лабораторных работ составлены в соответствии с программой по дисциплине Теплотехника для студентов специальнос
13038. ЖКХ. Бухгалтерский учет 1.6 MB
  ЖКХ. Бухгалтерский учет. Согласно общемировой тенденции перехода к смешанной экономике сочетающей различные формы собственности на средства производства в России взят курс на формирование эффективной социально ориентированной рыночной системы. Представление о неэффективност
13039. Расчет котельной установки 7.02 MB
  Курсовой проект Расчет котельной установки Введение Котлы типа ДКВР используются в различных отраслях промышленности сельском и коммунальном хозяйстве. Котлы ДКВР отличаются достаточно высокой экономичностью небольшой массой простотой конструкции малыми
13040. Разработка информационной системы оплата услуг ЖКХ 707.5 KB
  КУРСОВАЯ РАБОТА ПО ДИСЦИПЛИНЕ РАЗРАБОТКА И ЭКСПЛУАТАЦИЯ ИНФОРМАЦИОННОЙ СИСТЕМЫ НА ТЕМУ: Разработка информационной системы оплата услуг ЖКХ СОДЕРЖАНИЕ Введение Глава 1. Теоретическая часть. Описание предметной области 1.2. Описание первичных ...
13041. Управление финансами предприятия в сфере ЖКХ 319.5 KB
  Курсовая работа По дисциплине: Финансы организаций На тему: Управление финансами предприятия в сфере ЖКХ Содержание: Введение Глава 1. Теоретические основы понятие жилищнокоммунального хозяйства и его финансов Состояние ЖКХ в России О жилищноко...
13042. Жилищно-коммунальное хозяйство (ЖКХ) 277.12 KB
  Содержание Введение Структура и экономическое состояние отрасли Региональные особенности жилищнокоммунального хозяйства Стимулирование создания товариществ собственников жилья Антимонопольное регулирование и создание конкурентной среды в те
13043. Реформирование жилищно-коммунального хозяйства (ЖКХ) 212.5 KB
  ТЕОРЕТИЧЕСКИЕ И МЕТОДОЛОГИЧЕСКИЕ ОСНОВЫ ЖКХ В РФ. Понятие и структура ЖКХ: сущность особенности основные сферы инженерного обеспечения. Современное состояние ЖКХ в РФ и причины кризиса реформы системы Ж
13044. Жилищно-коммунальное хозяйство (ЖКХ) в сфере градостроительства 172.5 KB
  Содержание: Введение Государственное регулирование строительной деятельности и стандартизации в РФ Контроль и надзор за строительной деятельностью. Основы компетенции органов исполнительной власти осуществляющих государственной управле...