Студопедия Главная Случайная страница Обратная связь

Разделы: Автомобили Астрономия Биология География Дом и сад Другие языки Другое Информатика История Культура Литература Логика Математика Медицина Металлургия Механика Образование Охрана труда Педагогика Политика Право Психология Религия Риторика Социология Спорт Строительство Технология Туризм Физика Философия Финансы Химия Черчение Экология Экономика Электроника

Представление целых отрицательных чисел




Формат хранения целых чисел со знаком аналогичен формату хранения двоичного числа без знака (см. рис. 5.1), за исключением того, что старший разряд числа отводится для хранения знака числа - s. При хранении положительного числа знаковый разряд принимает значение 0, а при хранении отрицательного числа – 1. Целое число со знаком может занимать в памяти 1, 2, 4 и 8 байтов. Формат хранения целого двоичного числа со знаком, занимающего в памяти два байта и принимающего значения от –32768 до 32767, представлен на рис. 5.3.

S b b b b b b b b b b B b b b b

 

Рис. 5.3

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

Рассмотрим целое отрицательное n-разрядное двоичное число:

,

где an-1, ..., a1, а0 - цифры или соответствующие веса цифр: 0 и 1 разрядов целого отрицательного n разрядного двоичного числа; -an-1...а1a0 - запись целого отрицательного n разрядного двоичного числа; п-1,..., 1, 0 - номера разрядов целого отрицательного n разрядного двоичного числа; S -знак суммы; i = 0, n-1 - нижний и верхний пределы суммирования; ai´2i - весовой коэффициент i-го разряда (i = 0, n - 1).

Абсолютная величина целого отрицательного n разрядного двоичного числа равна:

.

Запись числа в форме: zan-1...а1a0 будем называть прямым кодом целого числа со знаком. Через z обозначен знак числа («-» или «+»).

Для записи числа в обратном и дополнительном кодах вводится дополнительный разряд с номером n с отрицательным весовым коэффициентом: -C, C > 0.

Для образования обратного кода коэффициент С выбирают равным максимальному n разрядному числу:

C = 2n - 1.

Значение числа N в обратном коде определяется выражением:

 

N = bnbn-1...b1b0 = bn´ (-2n + 1) + bn-1qn-1+…+ b1q1+ b0q0,

или

,

где bn, bn-1,..., b1, b0 - цифры и соответствующие веса цифр: 0 и 1 разрядов числа; bn - дополнительный знаковый разряд, для неотрицательных чисел равен 0 (bn = 1), для отрицательных чисел равен единице (bn = 1); bnbn-1...b1b0 - запись целого n разрядного отрицательного числа в обратном коде; n, п - 1, ..., 1, 0 - номера разрядов; bi ´ 2i - весовой коэффициент i-го разряда (i = 0, n-1); (-2n + 1) - весовой коэффициент знакового n-го разряда.

Пример 5.16. Пусть в обратном коде четырехразрядное число A имеет вид: 1011 (знаковый разряд 1, число отрицательное). Тогда это число в десятичной системе счисления равно:

A = 1 ´ (-23 + 1) + 0 ´ 22 + 1 ´ 21 + 1 ´ 20 = -7 + 0 + 2 + 1 = -4 (-01002).

Пример 5.17. Пусть в обратном коде четырехразрядное число B имеет вид: 0100 (знаковый разряд 0, число неотрицательное). Тогда это число в десятичной системе счисления равно:

B = 0 ´ (-23 + 1) + 1 ´ 22 + 0 ´ 21 + 0 ´ 20 = 0 + 4 + 0 + 0 = +4 (+01002).

Найдем правило нахождения (n + 1)-разрядного обратного кода m-разрядного отрицательного числа (mn). Запишем равенства:

;

;

;

.

Последнее равенство справедливо при 1- bi = ai или bi = 1 - ai (i = 0, n - 1).

Таким образом, для получения (n + 1)-разрядного обратного кода (цифры -bi, i = 0, n - 1) целого m-разрядного (mn) отрицательного числа (цифры -aj, j = 0, m-1) необходимо:

1) дополнить исходное m-разрядное число -am-1...а1a0 незначащими n - m нулями до разрядности n, т.е получить число: -an-1an-2… amam-1...а1a0, aj=0, j = m, n - 1);

2) получить цифры обратного кода bi (i = 0, n - 1). Для этого в n разрядах абсолютной величины исходного числа ai (i=0, n-1), дополненной до разрядности n, заменить 1 на 0, а 0 на 1 (bi = 1 - ai, i = 0, n-1);

3) в разряд с номером n записать 1 (bn = 1).

Пример 5.18. Найдем шестиразрядный обратный код числа -410 (-1002). Знаковый разряд имеет номер 5 (n = 5). Количество разрядов в прямом коде числа равно 3 (m = 3).

1. Дополним исходное число двумя незначащими нулями (n - m = = 5 - 3 = 2) до разрядности 5:

-1002 = -001002.

2. Получим цифры обратного кода bi (i = 0, 4). В пяти разрядах исходного числа меняем цифры 0 на 1 и 1 на 0:

цифры исходного числа: 00100

цифры обратного кода: 11011

3. Формируем старший знаковый разряд: 11011 ® 1111011.

Таким образом, шестиразрядный обратный код числа -4 равен 1111011.

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

;

;

.

Равенство выполняется при bi = ai., i = 0, n-1, bn = 0.

Сформулируем правило образования прямого кода числа из обратного кода целого отрицательного числа.

Для этого необходимо:

1) вычеркнуть n-й разряд обратного кода числа;

2) провести замену в оставшихся n-1 разрядах 1 на 0, 0 на 1;

3) приписать к полученной абсолютной величине числа знак «минус».

Пример 5.19. Пусть обратный код числа равен 1011 (n = 3). Найдем прямой код числа.

1. Вычеркиваем третий разряд обратного кода числа:

1011 ® 011.

2. Проводим замену в оставшихся трех разрядах 1 на 0, 0 на 1:

011

3. Приписываем слева к полученной абсолютной величине числа знак «минус»:

1002 ® -1002 (-410).

Таким образом, четырехразрядный обратный код числа 1011 соответствует числу -4.

Пример 5.20. Пусть обратный код числа равен 1111 (n = 3). Найдем прямой код числа.

1. Вычеркиваем третий разряд обратного кода числа:

1111 ® 111.

2. Проводим замену в оставшихся трех разрядах 1 на 0, 0 на 1:

111

3. Приписываем слева к полученной абсолютной величине числа знак «минус»:

02 ® -02 (010).

Таким образом, четырехразрядный обратный код числа 1111 соответствует числу 0.

При использовании обратного кода числа число 0 имеет два представления: 000..00 и 111..11.

Значения минимальных отрицательных и максимальных положительных целых чисел, которые можно хранить в обратном коде в словах размера 1, 2, 4 и 8 байтов, показаны в табл. 5.3. При заполнении таблицы использовались выражения для определения минимального отрицательного и максимального положительного числа:

Lmin = -28´l-1 - 1, (5.3)

Lmax = 28´l-1 - 1, (5.4)

где Lmin - минимальное целое отрицательное число, представленное в обратном коде; Lmax - максимальное целое положительное число, представленное в обратном коде; l - размер слова в байтах.

 

 

Таблица 5.3

Размер слова в байтах Размер слова в битах Значение минимального числа Значение максимального числа
-(27 -1)= - 127 (27 -1)= 127
-(215 - 1) = -32767 (215 - 1) = 32767
-(231 - 1) = -2147483647 (231 - 1) = 2147483647
-(263 - 1) < -16 ´ 1018 (263 - 1) < 16 ´ 1018

 

 

Для образования дополнительного кода коэффициент С выбирают равным C = 2n.

Тогда значение числа определяется выражением:

,

где dn , dn-1, ..., d1, d0 - цифры и соответствующие веса цифр: 0 и 1; dn - дополнительный знаковый разряд, для неотрицательных чисел равен 0 (dn = 0), для отрицательных чисел равен единице (dn = 1); dndn-1...d1d0 - запись целого (n+1)-разрядного отрицательного числа в дополнительном коде; n, п - 1, ..., 1, 0 - номера разрядов; di ´ 2i - весовой коэффициент i-го разряда дополнительного кода числа (i = 0, n-1). Весовой коэффициент n-го разряда дополнительного кода числа равен 2n.

Пусть в дополнительном коде число имеет вид: 1100. Тогда это число в прямом коде равно:

N = 1 ´ (-23) + 1 ´ 22 + 0 ´ 21 + 0 ´ 20 = -8 + 4 + 0 + 0 = -410 = -1002.

Пусть в дополнительном коде число имеет вид: 0100. Тогда это число в прямом коде равно:

N = 0 ´ (-23) + 1 ´ 22 + 0 ´ 21 + 0 ´ 20 = 0 + 4 + 0 + 0 = 410 =+1002.

Найдем правило записи отрицательного числа в прямом коде, представленном в дополнительном коде:

;

;

.

Так как , то:

;

;

;

.

Чтобы записать прямой код отрицательного числа, представленного в n-разрядном дополнительном коде, необходимо:

1) отбросить знаковый разряд dn;

2) найти обратный код полученного числа. Для этого необходимо заменить в разрядах di (i=0, n-1) нули единицами, а единицы - нулями;

3) к полученному числу прибавить единицу. При этом будет получена абсолютная величина искомого отрицательного числа в двоичной системе счисления;

4) слева приписать к полученной абсолютной величине знак «минус».

Пример 5.21. Найдем запись двоичного числа в прямом коде, если его четырехразрядный дополнительный код равен 1100.

1. Отбросим старший разряд: 1100 ® 100.

2. Найдем обратный код дополнительного кода числа:

100

3. К полученному числу прибавим единицу:

0112 + 12 = 1002.

4. Слева к полученному числу припишем знак «минус»:

1002 ® -1002.

Пример 5.22. Найдем запись двоичного числа в прямом коде, если его четырехразрядный дополнительный код равен 1000.

1. Отбросим старший разряд: 1000 ® 000.

2. Найдем обратный код дополнительного кода числа:

000

3. К полученному числу прибавим единицу:

1112 + 12 = 10002.

4. Слева к полученному числу припишем знак «минус»:

10002 ® -10002.

Пример 5.23. Найдем запись двоичного числа в прямом коде, если его четырехразрядный дополнительный код равен 1111.

1. Отбросим старший разряд: 1111 ® 111.

2. Найдем обратный код полученного числа:

111

3. К полученному числу прибавим единицу:

02 + 12 = 12.

 

4. Припишем знак «минус»:

12 ® -12.

Определим правило нахождения n разрядного дополнительного кода целого m-разрядного отрицательного числа:

;

;

;

.

Чтобы найти представление m-разрядного двоичного целого отрицательного числа в дополнительном коде с количеством двоичных разрядов n (n > m) необходимо выполнить следующие действия:

1) дополнить число слева n-m нулями до разрядности n, an = 0;

2) найти обратный код полученного числа. При этом двоичные нули исходного числа заменяются двоичными единицами, а двоичные единицы - двоичными нулями, 1 - an становится равным единице;

3) к полученному обратному коду прибавить единицу.

Пример 5.24. Найдем шестиразрядный дополнительный код числа -1002.

1. Дополним исходное число до необходимой разрядности:

100 ® 00100.

2.Найдем обратный код полученного числа:

00100

3. Прибавим единицу к полученному коду:

11001 + 1 =11010.

 

4. Припишем единицу знакового разряда:

11010 ® 111010.

Заметим, что отрицательные целые n-разрядные числа вида -2n-1 можно записать в дополнительном коде с n разрядами.

Пример 5.25. Найдем шестиразрядный дополнительный код шестиразрядного числа -25.

1. Дополнять исходное число -25 = -1000002 до разрядности равной 6 в этом случае нет необходимости. Число -25 уже шестиразрядное.

2.Найдем значения 1 - ai (i = 1,6) :

ai 100000

1 - ai 011111

3. Прибавим единицу к полученному числу:

011111 + 1 =100000.

4. Припишем единицу знакового разряда слева к числу в этом случае нет необходимости, так как уже b5 = 1.

Таким образом, дополнительный код числа -25 равен 100000. Проверим результат преобразования.

1. Отбросим знаковый разряд:

00000.

2. Восстановим прямой код полученного числа:

11111.

3. К полученному числу прибавим единицу:

111112 + 12 = 1000002.

4. Слева к полученному числу припишем знак «минус»:

1000002 ® -1000002.

Полученный результат совпал с исходным числом:

-1000002 = -25.

Значения минимальных отрицательных и максимальных положительных целых чисел, которые можно хранить в дополнительном коде в словах размера 1, 2, 4 и 8 байтов, показаны в табл. 5.5. При заполнении таблицы использовались выражения для определения минимального отрицательного и максимального положительного числа:

Lmin = -28´l–1;

Lmax = 28´l–1 - 1,

где Lmin - минимальное целое отрицательное число, представленное в обратном коде; Lmax - максимальное целое положительное число, представленное в обратном коде; l - размер слова в байтах.


Таблица 5.5

Размер слова в байтах Размер слова в битах Значение минимального числа Значение максимального числа
-27= - 128 (27 -1)= 127
-215 = -32768 (215 - 1) = 32767
-231 = -2147483648 (231 - 1) = 2147483647
-263 < -16 ´ 1018 (263 - 1) < 16 ´ 1018

 







Дата добавления: 2014-11-12; просмотров: 714. Нарушение авторских прав


Рекомендуемые страницы:


Studopedia.info - Студопедия - 2014-2020 год . (0.02 сек.) русская версия | украинская версия