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

Для представления целых чисел со знаком в ЭВМ используют прямой, обратный и дополнительный коды. При этом положительные числа во всех кодах представляются одинаково. Для дальнейшего изложения будем считать, что n = 4. В этом случае, существует 16 различных двоичных комбинаций, представленных в таблице 2. В таблице 3 эти комбинации рассмотрены для знакового представления чисел. Старший знаковый разряд выделен в таблице жирным шрифтом.

Прямой код числа формируется по следующему правилу: в знаковый разряд записывается знак числа, а в цифровые разряды – модуль числа. Несмотря на то, что данный код является наиболее простым и наглядным в нем нельзя выполнять операцию сложения отрицательных чисел или чисел с разным знаком. Например, сложение чисел +7 и -6 в прямом коде дает неверный результат:

0111 (+7)

+ 1110 (-6)

0101 Представление целых чисел в ЭВМ - student2.ru (+5). Следовательно, надо переходить к другим кодам, а именно, к обратному и дополнительному кодам.

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

0111 (+7)

+ 1001 (-6)

Представление целых чисел в ЭВМ - student2.ru 1 0000

Представление целых чисел в ЭВМ - student2.ru +

Представление целых чисел в ЭВМ - student2.ru

0001 (+1).

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

Таблица 3 - Представление чисел от -7 до +7 в машинных кодах

(10) Прямой код Обратный код Дополнительный код
+1 +2 +3 +4 +5 +6 +7 -0 -1 -2 -3 -4 -5 -6 -7 0000 0001 0010 0011 0100 0101 0110 0111 1000 1001 1010 1011 1100 1101 1110 1111 0000 0001 0010 0011 0100 0101 0110 0111 1111 1110 1101 1100 1011 1010 1001 1000 0000 0001 0010 0011 0100 0101 0110 0111 0000 1111 1110 1101 1100 1011 1010 1001

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

0111 (+7)

+ 1010 (-6)

Представление целых чисел в ЭВМ - student2.ru Представление целых чисел в ЭВМ - student2.ru Представление целых чисел в ЭВМ - student2.ru 1 0001 (+1). При сложении чисел в дополнительном коде перенос из знакового разряда не учитывается. Результат сложения – правильный - +1.

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

· не надо прибавлять перенос, возникающий в знаковом разряде;

· дополнительный код – единственный код, который имеет одно изображение ноля (таблица 3), т.е. при выполнении операции перехода проверка на ноль выполняется только один раз.

Следует также отметить, что комбинация 1000, отсутствующая в таблице 3, используется в дополнительном коде для представления числа -8.

Таким образом, диапазон представления целых чисел в формате со знаком для n = 4 составит от -8 до +7, а при произвольном n - от -2n-1 до 2n-1 -1.

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

Взаимно обратными называются цифры, сумма которых равна q – 1, где q – основание системы счисления. Для двоичной системы взаимно обратными являются цифры 0 и 1. Приведем взаимно обратные цифры для других систем счисления:

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

0 1 2 3 4 5 6 7

7 6 5 4 3 2 1 0;

б) для шестнадцатеричной системы:

0 1 2 3 4 5 6 7 8 9 A B C D E F

F E D C B A 9 8 7 6 5 4 3 2 1 0.

Пример. A = 17(16). Определить число –A, т.е перевести число A в дополнительный код.

E8 + 1 = E9.

2. ПРИМЕР ВЫПОЛНЕНИЯ ЛАБОРАТОРНОЙ РАБОТЫ

Выполнение задания рассмотрим на конкретном примере, предположив, что предпоследней цифре шифра соответствует число A1 = 90 (10), а последней – число A2 = 33 (10).

Для выполнения задания необходимо выполнить следующую последовательность действий:

1. Cформировать число W в десятичной системе. W = 90,33 (10).

2. Для перевода числа W в другие системы необходимо воспользоваться отдельно правилами перевода целой и дробной части числа (число A1 – целое, а число A2 – дробное).

Перевод в двоичную систему.

Представление целых чисел в ЭВМ - student2.ru а) целой части б) дробной части

Представление целых чисел в ЭВМ - student2.ru Представление целых чисел в ЭВМ - student2.ru 90 2 0,33

Представление целых чисел в ЭВМ - student2.ru Представление целых чисел в ЭВМ - student2.ru Представление целых чисел в ЭВМ - student2.ru Представление целых чисел в ЭВМ - student2.ru Представление целых чисел в ЭВМ - student2.ru 90 45 2 2

Представление целых чисел в ЭВМ - student2.ru Представление целых чисел в ЭВМ - student2.ru Представление целых чисел в ЭВМ - student2.ru 0 44 22 2 0,66

Представление целых чисел в ЭВМ - student2.ru Представление целых чисел в ЭВМ - student2.ru Представление целых чисел в ЭВМ - student2.ru Представление целых чисел в ЭВМ - student2.ru Представление целых чисел в ЭВМ - student2.ru 1 22 11 2 2

Представление целых чисел в ЭВМ - student2.ru Представление целых чисел в ЭВМ - student2.ru Представление целых чисел в ЭВМ - student2.ru 0 10 5 2 1,32

Представление целых чисел в ЭВМ - student2.ru Представление целых чисел в ЭВМ - student2.ru Представление целых чисел в ЭВМ - student2.ru 1 4 2 2 2

Представление целых чисел в ЭВМ - student2.ru 1 2 1 0,64

Представление целых чисел в ЭВМ - student2.ru Представление целых чисел в ЭВМ - student2.ru 0 2

Представление целых чисел в ЭВМ - student2.ru 1,28

Представление целых чисел в ЭВМ - student2.ru 2

0,56

Представление целых чисел в ЭВМ - student2.ru 2

1,12

W =1011010,010101 (2). Проверим правильность перевода:

Представление целых чисел в ЭВМ - student2.ru Представление целых чисел в ЭВМ - student2.ru +

Представление целых чисел в ЭВМ - student2.ru (10).

Перевод в восьмеричную систему.

а) целой части б) дробной части

Представление целых чисел в ЭВМ - student2.ru Представление целых чисел в ЭВМ - student2.ru Представление целых чисел в ЭВМ - student2.ru Представление целых чисел в ЭВМ - student2.ru 90 8 0,33

88 11 8 8

Представление целых чисел в ЭВМ - student2.ru Представление целых чисел в ЭВМ - student2.ru Представление целых чисел в ЭВМ - student2.ru Представление целых чисел в ЭВМ - student2.ru 2 8 1 2,64

Представление целых чисел в ЭВМ - student2.ru Представление целых чисел в ЭВМ - student2.ru 3 8

Представление целых чисел в ЭВМ - student2.ru Представление целых чисел в ЭВМ - student2.ru 5,12

W =132,25 (8). Проверим правильность перевода:

Представление целых чисел в ЭВМ - student2.ru (10).

Перевод в шестнадцатеричную систему.

а) целой части б) дробной части

Представление целых чисел в ЭВМ - student2.ru Представление целых чисел в ЭВМ - student2.ru Представление целых чисел в ЭВМ - student2.ru 90 16 0,33

80 5 16

Представление целых чисел в ЭВМ - student2.ru Представление целых чисел в ЭВМ - student2.ru Представление целых чисел в ЭВМ - student2.ru 10 5,28

Представление целых чисел в ЭВМ - student2.ru 16

Представление целых чисел в ЭВМ - student2.ru 4,48

W =5A,54 (16). Проверим правильность перевода:

Представление целых чисел в ЭВМ - student2.ru (10).

Заметим, что дробная часть исходного числа и дробная часть, получаемая при переводе в десятичную систему из двоичной, восьмеричной и шестнадцатеричной систем отличается на 0,001875, что обусловлено заданной точностью перевода.

Поскольку двоичная система связана с восьмеричной и шестнадцатеричной специальными соотношениями (8 = 23,16 = 24), то выполнив перевод из десятичной системы в двоичную, можно выполнить перевод в восьмеричную систему (разбивая двоичное число на триады) и в шестнадцатеричную систему (разбивая число на тетрады).

Представление целых чисел в ЭВМ - student2.ru Представление целых чисел в ЭВМ - student2.ru Представление целых чисел в ЭВМ - student2.ru Представление целых чисел в ЭВМ - student2.ru Представление целых чисел в ЭВМ - student2.ru W = 0 0 1 0 1 1 0 1 0 , 0 1 0 1 0 1 (2)

 
  Представление целых чисел в ЭВМ - student2.ru

1 3 2 , 2 5 (8)

Представление целых чисел в ЭВМ - student2.ru Представление целых чисел в ЭВМ - student2.ru Представление целых чисел в ЭВМ - student2.ru Представление целых чисел в ЭВМ - student2.ru W = 0 1 0 1 1 0 1 0 , 0 1 0 1 0 1 0 0 (2)

5 A , 5 4 (16).

3. Представим числа в дополнительном коде.

3.1 Для двоичной системы

A1 = 1011010 (2). + A1 = 0 | 1011010.

- A1 = 1 | 0100101 (инвертируем разряды)

+ 1 (добавляем 1 к младшему разряду)

Представление целых чисел в ЭВМ - student2.ru 1 | 0100110.

Переведем целое число A2 в двоичную, восьмеричную и шестнадцатиричную системы счисления (также как мы переводили число A1) .

A2 = 33 (10) = 100001 (2) = 41 (8) = 21 (16).

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

A2 = 0100001 (2). + A2 = 0 | 0100001.

- A2 = 1 | 1011110 (инвертируем разряды)

+ 1 (добавляем 1 к младшему разряду)

Представление целых чисел в ЭВМ - student2.ru 1 | 1011111.

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

Следовательно, в восьмеричной системе для представления чисел потребуется три разряда, а в шестнадцатеричной – два.

3.2 Для восьмеричной системы:

A1 = 132 (8). + A1 = 132.

- A1 = 645 (заменяем цифры на взаимно обратные)

+ 1 (добавляем 1 к младшему разряду)

Представление целых чисел в ЭВМ - student2.ru 646.

A2 = 41 (8). + A2 = 041.

- A2 = 736 (заменяем цифры на взаимно обратные)

+ 1 (добавляем 1 к младшему разряду)

Представление целых чисел в ЭВМ - student2.ru 737.

3.3 Для шестнадцатиричной системы:

A1 = 5A (16). +A1 = 5A.

- A1 = A5 (заменяем цифры на взаимно обратные)

+ 1 (добавляем 1 к младшему разряду)

Представление целых чисел в ЭВМ - student2.ru A6.

A2 = 21 (16). + A2 = 21.

- A2 = DE (заменяем цифры на взаимно обратные)

+ 1 (добавляем 1 к младшему разряду)

Представление целых чисел в ЭВМ - student2.ru DF.

4. Выполним операции сложения над числами в двоичной, восьмеричной и шестнадцатеричной системах:

4.1 В двоичной системе:

A1 + A2 = 0 | 1011010 -A1 – A2 = 1 | 0100110

+ 0 | 0100001 1 | 1011111

Представление целых чисел в ЭВМ - student2.ru Представление целых чисел в ЭВМ - student2.ru 0 | 1111011 (2) 1| 0000101 (2)

A1 - A2 = 0 | 1011010 -A1 + A2 = 1 | 0100110

+ 1 | 1011111 0 | 0100001

Представление целых чисел в ЭВМ - student2.ru Представление целых чисел в ЭВМ - student2.ru 0 | 0111001 (2) 1| 1000111 (2) .

4.2 В восьмеричной системе:

A1 + A2 = 132 -A1 – A2 = 646

+ 041 737

Представление целых чисел в ЭВМ - student2.ru Представление целых чисел в ЭВМ - student2.ru 173 (8) 605 (8)

A1 - A2 = 132 -A1 + A2 = 646

+ 737 041

Представление целых чисел в ЭВМ - student2.ru Представление целых чисел в ЭВМ - student2.ru 071 (8) 707 (8) .

4.3 В шестнадцатеричной системе:

A1 + A2 = 5A -A1 – A2 = A6

+ 21 DF

Представление целых чисел в ЭВМ - student2.ru Представление целых чисел в ЭВМ - student2.ru 7B (16) 85 (16)

A1 - A2 = 5A -A1 + A2 = A6

+ DF 21

Представление целых чисел в ЭВМ - student2.ru Представление целых чисел в ЭВМ - student2.ru 3 9 (16) C7 (16) .

Заметим, что так как A1 + A2 = - (-A1 - A2) и A1 - A2 = - (A2 – A1), то вместо четырех действий в каждой системе можно было выполнить только два, а остальные два результата получить, используя перевод в дополнительный код. Например, для системы с основанием 16 имеем:

A1 + A2 = 7B (16) -A1 – A2 = 84

+ 1

Представление целых чисел в ЭВМ - student2.ru 85 (16) .

Покажем, что для операции A1 – A2 действия во всех системах счисления приводят к одному и тому же результату, используя перевод в десятичную систему.

A1 – A2 = 90 – 33 = 57 (10).

A1 – A2 = 0111001 (2) = Представление целых чисел в ЭВМ - student2.ru 1 + 8 + 16 + 32 = 57 (10).

A1 – A2 = 071 (8) = Представление целых чисел в ЭВМ - student2.ru 1 + 56 = 57 (10).

A1 – A2 = 039 (16) = Представление целых чисел в ЭВМ - student2.ru 9 + 48 = 57 (10).

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

Так как в нашем примере знаковые числа представляются в формате байта, то допустимый диапазон представления чисел в десятичной системе составляет от -128 до + 127. В рассмотренном примере при сложении чисел арифметического переполнения не возникает

Наши рекомендации