Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
200801_Lec_03_1.pdf
Скачиваний:
19
Добавлен:
16.03.2015
Размер:
421.2 Кб
Скачать

местоположения, которое выделяется для размещения набора символов системы таким образом, чтобы байт С мог содержать 8, 9, 16 битов и т. д. Однако 8-битовый байт — это байт, используемый для описания работы чипов памяти, байт также используется для описания передачи данных.

8 битов представляют собой нумерацию от 7 до 0, осуществляемую слева направо. 7-й бит называется старшим битом, 0-й бит — младшим битом в байте. Каждый бит в байте соответствует показателю степени с основанием 2. Структура байта изображена на рис.1.

Номер бита:

7

6

5

4

3

2

1

0

 

 

 

 

 

 

 

 

 

 

0

0

1

1

1

1

0

1

 

 

 

 

 

 

 

 

 

Значение бита:

128

64

32

16

8

4

2

1

Рисунок 1. Представление байта

На этом рисунке 128 — это 2 в 7-й степени, 64 — 2 в 6-й степени и т.д. Самое большое число, которое может представлять этот байт, - это число со всем набором битов, равных 1: 11111111. Запись этого двоичного числа следующая: 128+64+32+16+8+4+2+1 = 255.

Самое маленькое двоичное число — 00000000 или просто 0. Байт может хранить числа в интервале от 0 до 255 (256 возможных значений). При изменении интерпретации возможных значений байт может хранить числа в интервале от -128 до +127 (все равно 256 возможных значений).

1.3.2 Целые числа со знаком

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

Различают несколько представлений чисел со знаком:

Знак-и-число

Дополнение до единицы

Дополнение до двух (двоичное дополнение)

Смещение на N бит

1.3.2.1 Представление "знак-и-число"

Вероятно, самый простой способ представления числа со знаком состоит в том, чтобы зарезервировать 1 бит (старший бит), который для целого числа со знаком определяет знак числа, и при этом зарезервировать оставшиеся биты непосредственно для записи числа. В случае, если для хранения целого числа выделен один байт (для простоты рассмотрения), при таком представлении с величиной знака (sign-magnitude) 10000001 будет соответствовать -1, а 00000001 будет соответствовать 1. [Общий диапазон представляемых чисел - конечно, если для хранения числа будет выделен всего один байт - будет заключён между -127 и +127].

Так, например, число (-43)10 будет записано в данном представлении как 10101011.

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

1.3.2.2 Дополнение до единицы

Метод дополнения формирует значение отрицательного числа, инвертируя каждый бит в шаблоне. Например, 00000001 — это 1, а 11111110 — это -1. Этот метод также генерирует-0: 11111111. Диапазон значений, задаваемых одним байтом, изменяется от-127 до+127.

Таким образом, число (-43) должно быть записано как 11010100. Последовательность преобразования такова - сначала запишем модуль числа в двоичном виде: 4310 = 001010112.Поскольку число отрицательное, инвертируем все биты (или найдём такое число, при добавлении которого к вышеуказанному в сумме получатся все единичные биты): 11010100. Это и есть значение числа в представлении единичного дополнения.

Как и в представлении "знак-и-число", возникает проблема с представлением нуля двумя числами (11111111 (-0) и 00000000(+0)). Кроме того, есть сложности с арифметическими операциями. Представим, например, что нужно найти сумму двух чисел: (-1) и (+2). Эти числа записываются как 11111110 и 00000010 соответственно в используемом представлении. Если просуммировать числа обычным образом (поразрядно), получим:

11111110

+00000010

00000000 то есть ноль. Обратите внимание, что если цифру переноса добавить к ответу, получится

правильный ответ! 00000000 + 1 = 00000001.

Такое представление чисел использовалось в некоторых сериях компьютеорв PDP-1, UNIVAC 1100/2200 и др.

1.3.2.3 Дополнение до двух

Метод двойного дополнения лишён упомянутых выше недостатков и является наиболее общим методом, используемым на сегодня. Опять же, если для хранения целого числа выделен один бит, то значения от 0 до 127 представляются последними 7 битами, причём старший бит равен 0. При этом если старший бит i равен 1, то число будет отрицательным. Различие состоит в определении значения для этого отрицательного числа.

Вычтите битовый шаблон из отрицательного числа для 9-битового шаблона 100000000 (преобразованное в двоичную систему счисления десятичное число 256), результат и будет являться искомой величиной.

Возьмём в качестве примера шаблон 10000000. Для байта без знака ему соответствовало бы число 128. При работе с числом со знаком оно будет отрицательным (7-й бит установлен в 1) и будет представлено в виде 100000000 - 10000000 = 10000000 (128). Следовательно, это число -128. (Это число могло бы выражаться значением -0 для представления с величиной знака.) Аналогично 10000001 соответствует -127, а 11111111 соответствует -1. Метод позволяет представлять числа в диапазоне от -128 до +127.

Примечание: простейший метод для изменения знака при использовании двойного дополнения заключается в том, чтобы в двоичной записи числа поменять значения всех битов на обратные (т. е. 0 заменить на 1, а 1 — на 0), а затем прибавить к младшему биту 1. По­ скольку 1 соответствует 00000001, -1 — это 11111110+1, или 11111111, точно так же, как вы видели ранее.

Рассмотрим обоснование применения метода двоичного дополнения для представления целых чисел в большинстве современных компьютеров на примере. Сложим 0011 (3) и 1111 (-1), в результате получим кажущееся неверным значение 10010. Однако, игнорируя пятый бит (справа), получим верный ответ 0010 (2). Игнорирование пятого бита работает во всех случаях (за исключением переполнения разряда). Следовательно, при операциях с числами, записанными в представлении дополнения до двух, не требуется дополнительных действий

для определения значения результата (!), что и обусловило его повсеместное использование.

1.3.2.4Смещение на N

Всмещённом представлении используется некоторое предопределённое значение смещения N. Число записывается как беззнаковая величина, которая на N больше нужного значения. То есть 0 записывается как N, а -N представляется нулевым битовым шаблоном.

Например, в таблице ниже приведено представление "Смещение на 5":

Десятичное число

Двоичное число

Число в представлении

 

 

"Смещение на 5"

 

 

 

0

0000

-5

 

 

 

1

0001

-4

 

 

 

2

0010

-3

 

 

 

3

0011

-2

 

 

 

4

0100

-1

 

 

 

5

0101

0

 

 

 

6

0110

1

 

 

 

...

...

...

 

 

 

15

1111

10

 

 

 

1.3.2.5 Сравнительная таблица представления целых чисел$

Для закрепления материала приведём сравнительную таблицу, в которой рассмотрим представления целых чисел (4-битовый шаблон) во всех упомянутых вариантах.

Десятичное

Беззнаковое

Знак-и-число

Дополнение

Дополнение

Смещение на

число

целое

 

до единицы

до двух

7

 

 

 

 

 

 

+8

1000

нет

нет

нет

1111

 

 

 

 

 

 

+7

0111

0111

0111

0111

1110

 

 

 

 

 

 

+6

0110

0110

0110

0110

1101

 

 

 

 

 

 

+5

0101

0101

0101

0101

1100

 

 

 

 

 

 

+4

0100

0100

0100

0100

1011

 

 

 

 

 

 

+3

0011

0011

0011

0011

1010

 

 

 

 

 

 

+2

0010

0010

0010

0010

1001

 

 

 

 

 

 

+1

0001

0001

0001

0001

1000

 

 

 

 

 

 

(+)0

0000

0000

0000

0000

0111

 

 

 

 

 

 

(-)0

нет

1000

1111

нет

нет

 

 

 

 

 

 

-1

нет

1001

1110

1111

0110

 

 

 

 

 

 

-2

нет

1010

1101

1110

0101

 

 

 

 

 

 

$ цит.по Wikipedia: Signed Number representations - http://en.wikipedia.org/

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]