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

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

Организация стока поверхностных вод: Наибольшее количество влаги на земном шаре испаряется с поверхности морей и океанов (88‰)...

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

2017-09-30 298
Представление целых чисел в ЭВМ 0.00 из 5.00 0 оценок
Заказать работу

 

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

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

0111 (+7)

+ 1110 (-6)

0101 (+5). Следовательно, надо переходить к другим кодам, а именно, к обратному и дополнительному кодам.

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

0111 (+7)

+ 1001 (-6)

1 0000

+

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)

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 – дробное).

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

 

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

90 2 0,33

90 45 2 2

0 44 22 2 0,66

1 22 11 2 2

0 10 5 2 1,32

1 4 2 2 2

1 2 1 0,64

0 2

1,28

2

0,56

2

1,12

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

 

+

(10).

 

 

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

 

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

 

90 8 0,33

88 11 8 8

2 8 1 2,64

3 8

5,12

 

 

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

(10).

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

 

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

 

90 16 0,33

80 5 16

10 5,28

16

4,48

 

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

(10).

 

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

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

 

W = 0 0 1 0 1 1 0 1 0, 0 1 0 1 0 1 (2)

 
 


1 3 2, 2 5 (8)

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 к младшему разряду)

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 к младшему разряду)

1 | 1011111.

 

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

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

 

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

 

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

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

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

646.

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

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

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

737.

 

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

 

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

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

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

A6.

 

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

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

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

DF.

 

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

 

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

 

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

+ 0 | 0100001 1 | 1011111

0 | 1111011 (2) 1| 0000101 (2)

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

+ 1 | 1011111 0 | 0100001

0 | 0111001 (2) 1| 1000111 (2).

 

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

 

A1 + A2 = 132 -A1 – A2 = 646

+ 041 737

173 (8) 605 (8)

 

A1 - A2 = 132 -A1 + A2 = 646

+ 737 041

071 (8) 707 (8).

 

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

 

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

+ 21 DF

7B (16) 85 (16)

 

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

+ DF 21

3 9 (16) C7 (16).

 

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

 

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

+ 1

85 (16).

 

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

 

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

A1 – A2 = 0111001 (2) = 1 + 8 + 16 + 32 = 57 (10).

A1 – A2 = 071 (8) = 1 + 56 = 57 (10).

A1 – A2 = 039 (16) = 9 + 48 = 57 (10).

 

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

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

 


Поделиться с друзьями:

Биохимия спиртового брожения: Основу технологии получения пива составляет спиртовое брожение, - при котором сахар превращается...

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

Таксономические единицы (категории) растений: Каждая система классификации состоит из определённых соподчиненных друг другу...

Двойное оплодотворение у цветковых растений: Оплодотворение - это процесс слияния мужской и женской половых клеток с образованием зиготы...



© cyberpedia.su 2017-2024 - Не является автором материалов. Исключительное право сохранено за автором текста.
Если вы не хотите, чтобы данный материал был у нас на сайте, перейдите по ссылке: Нарушение авторских прав. Мы поможем в написании вашей работы!

0.058 с.