П.3-2 Дополнительный код представления целых чисел со знаком.




П.2 Кодирование и обработка на компьютере целых чисел без знака

Способы кодирования целых чисел различаются для двух видов этих чисел:

- Целых положительных чисел (без знака),

- Целых чисел со знаком.

 

Рассмотрим сначала кодирование целых чисел без знака.

 

7210=10010002

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

Номера разрядов                
Содержимое разрядов                

 

В двухбайтовом формате представление числа:

Номера разрядов                                
Содержимое разрядов                                

 

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

 

Понятие наибольшего и наименьшего целого числа без знака:

Zmax=11111111111111112=6553510

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

Zmin=00000000000000002=010

 

Названия и параметры беззнаковых целых переменных в разных языках программирования

Формат числа (в байтах) Диапазон Названия типов в языках программирования
Запись с порядком Обычная запись Pascal C++ Java
  0…..28-1 0 255 byte    
  0…..216-1 0……65535 word    

 

 

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

 

Арифметические операции, не меняющие типа целых беззнаковых переменных:

1. Сложение:

02 + 02 = 02 02 + 12 = 12 12 + 02 = 12 12 + 12 = 102

 

В последнем примере 12 + 12 = 102 возникает необходимость поместить куда-то старший разряд. Место, куда переносится цифра старшего разряда, называется битом переноса или регистром переноса (переполнения).

 

Пример: 6553410 + 310

  Регистр переноса Разряды (регистры, ячейки)
Первое слагаемое                                  
Второе слагаемое                                  
Сумма                                  

 

Регистр переноса (переполнения) получил значение равное ЕДИНИЦА – это ошибка вычислений. В языках программирования это вызывает останов вычислений. В некоторых программах (Excel, MathCad) в этом случае переменная автоматически преобразуется в вещественный тип.

 

2. Умножение:

02 * 02 = 02 02 * 12 = 02 12 * 02 = 02 12 + 12 = 12

 

Пример: 1510 * 510 = 7510 = 1000012

  Разряды
Первое слагаемое            
Второе слагаемое            
Умножаем «в столбик»
             
             
             
Сумма            

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


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

 

Напомним, что способы кодирования целых чисел различаются для двух видов этих чисел:

- Целых положительных чисел (без знака),

- Целых чисел со знаком.

 

Рассмотрим сначала кодирование целых чисел со знаком.

 

 

П.3-1 Прямой n-разрядный двоичный код представления целых чисел со знаком.

Один разряд (обычно самый старший) отводится для хранения информации о знаке, остальные n-1 разряды – для хранения значащих цифр.

Для положительных чисел в знаковый разряд помещают 0.

Для отрицательных чисел в знаковый разряд помещают 1.

 

Примеры для 8-разрядных машинных слов:

а). 110=12

Знаковый разряд Разряды значащих цифр
               

 

б). 12710=11111112

Знаковый разряд Разряды значащих цифр
               

 

в). -110

Знаковый разряд Разряды значащих цифр
               

 

в). -12710

Знаковый разряд Разряды значащих цифр
               

 


П.3-2 Дополнительный код представления целых чисел со знаком.

Зачем нужен дополнительный код?

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

 

Пример, поясняющий принцип организации дополнительного кода.

Дано: ЭВМ, оперирующая десятичными двухразрядными числами должна сложить 2 числа: X1=84 и X2=-32.

Решение:

1). Чтобы избежать вычитания, заменим код числа X2 на его дополнительный код [X2], вычисляемый в соответствии со следующим определением дополнительного кода:

[X2] =100 + X2 = 100 – 32 = 68 (1)

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

2). Складываем:
Y = X1 + [X2] = 84 + 68 =152

3). Учитывая, что вычисления производятся на устройстве с двумя разрядами, отбрасываем старший разряд и получаем:

REZULTAT = 52

 

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

 

Обобщая формулу (1), можно ввести определение:

Дополнением M n -разрядного целого числа K называется
M=pn + K, где p это основание системы счисления.

 

Общее количество целых n – разрядных чисел: pn и они лежат в диапазоне [0, pn-1 ].

 

Правило формирования дополнительного кода:

Числа дополнительного кода, лежащие в диапазоне [0, pn/2-1 ] соотносим с положительными числами, кодируемыми нами.

Числа дополнительного кода, лежащие в диапазоне [ pn/2, pn-1 ] соотносим с отрицательными числами, кодируемыми нами.


Таблица представления чисел в дополнительном коде:

Прямой код 5-разрядных десятичных чисел Дополнительный код чисел
5-разрядный десятичный 16-разрядный двоичный
-3 99 997 1 111 1111 1111 1101
-2 99 998 1 111 1111 1111 1110
-1 99 999 1 111 1111 1111 1111
  00 000 0 000 0000 0000 0000
+1 00 001 0 000 0000 0000 0001
+2 00 002 0 000 0000 0000 0010
+3 00 003 0 000 0000 0000 0011

Проверим, верна ли таблица? Сумма «положительных» и «отрицательных» чисел должна давать нуль. Проверим, выполняется ли это для чисел из таблицы.

 

В прямом коде: +1-1=0

В обратном коде при 10-тичной записи:

00 001 + 99 999 = 1 00 000

00 002 + 99 998 = 1 00 000

Отбрасывая старшие разряды (выходящие за пределы пяти разрядов), получаем нуль, т.е. правильный ответ.

 

Проделаем тоже самое для этих же чисел в двоичном представлении

 

0 000 0000 0000 0001

+

1 111 1111 1111 1111

1 0 000 0000 0000 0000

 

0 000 0000 0000 0000 0010

+

1 111 1111 1111 1111 1110

1 0 000 0000 0000 0000 0000

 

Аналогично предыдущему: отбрасывая старшие разряды (выходящие за пределы шестнадцати разрядов), получаем нуль, т.е. правильный ответ.

 




Поделиться:




Поиск по сайту

©2015-2024 poisk-ru.ru
Все права принадлежать их авторам. Данный сайт не претендует на авторства, а предоставляет бесплатное использование.
Дата создания страницы: 2016-02-16 Нарушение авторских прав и Нарушение персональных данных


Поиск по сайту: