Кодирование целых чисел



Множество целых чисел, представимых в памяти ЭВМ, ограничено. Ди­а­пазон значений зависит от размера области памяти, используемой для раз­ме­ще­ния чисел. В k-разрядной ячейке может храниться 2k различных значе­ний целых чисел.
Целые числа могут занимать 1, 2, 4 или 8 байт (для 64-разрядных ма­шин).
Чтобы получить внутреннее представление целого положительного чис­ла N, хранящегося в k-разрядном машинном слове, необходимо:

1. перевести число N в двоичную систему счисления;
2. полученный результат дополнить слева незначащими нулями до k разрядов.

Код целого числа может рассматриваться как двоичное число со знаком или без знака.
При беззнаковом представлении все разряды используются для за­писи значения числа.
Пример:
Число 107 = 11010112 будет записано:
в 1 байт как     01101011
в 2 байта как   00000000  01101011
                         1-й байт               0-й байт
в 4 байта как   00000000 00000000 00000000  01101011
                         3-й байт               2-й байт      1-й байт               0-й байт

Минимальное беззнаковое число равно 0. Максимальное беззнаковое число равно 2n – 1, где n – кол-во двоичных разрядов, используемых для за­писи числа.
Например для 2-хбайтового представления max =11111111 111111112 =
1 00000000 00000000 – 1 = 216 – 1  = 65 535

Для записи чисел со знаком старший (левый) разряд отводится под знак числа. Если число неотрицательное, то в знаковый разряд записывается 0, в противном случае – 1, т.е. единица в знаковом разряде означает знак “ми­нус”.
Целые числа со знаком могут быть записаны в прямом, обратном и до­пол­­нительном коде.

  1. В прямом коде число хранится в виде: знак+абсолютное значение (мо­дуль) числа.
  2. В обратном коде в значении числа нули заменяют на единицы, а едини­цы на нули.
  3. Дополнительный код получают путем прибавления 1 к обратному.

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

Пример. Рассмотрим внутреннее представление целого отрицательного числа:  -6 = 1102.
Однобайтовое:
Прямой код:           1000 0110
Обратный код:       1111 1001
Дополнительный:  1111 1001
                                             + 1
                                1111 1010
Четырехбайтовое:
Прямой код:           10000000 00000000 00000000  00000110
Обратный код:       1111111   1111111   11111111  11111001
Дополнительный:  1111111   1111111   11111111  11111001
                                                                                                + 1
                                1111111   1111111   11111111  11111010

Для того, чтобы получить значение отрицательного числа, записанного в дополнительном коде, можно использовать один из двух алгоритмов:
1) вычесть 1 из дополнительного кода (получаем обратный код) и заме­нить все нули на единицы, а единицы на нули;
2) сначала заменить все нули на единицы, единицы на нули, затем при­ба­вить единицу к результату.
Пример: возьмем однобайтовый доп. код : 1111 1010 и используем второй алгоритм:   1111 1010 -- > - (0000 0101 + 1) = - 1102 = -6.
Диапазон значений знаковых чисел
Рассмотрим однобайтовое представление. Возможные дополнительные коды знаковых чисел:
0111 1111
. . .
0000 0001
0000 0000
1111 1111
1111 1110      Отрицательные числа 
. . .
1000 0000
Рассмотрим десятичные значения этих чисел:
0111 1111 = 27 – 1 = 128 - 1 = 127
0000 0001 = 1
0000 0000 = 0
1111 1111 -> -(000 0000 + 1) = -1
1111 1110 -> -(000 0001 + 1) = -2
1000 0000 -> -(111 1111 + 1) = -(1000 0000) = -27 = -128
Таким образом диапазон значений знаковых однобайтовых чисел:
от -128 до 127.
Аналогично, диапазон значений двухбайтовых целых чисел:
 -215 - +(215 -1) (
от -32768  до 32767).
Диапазон значений четырехбайтовых целых чисел со знаком:
-231 - +(231 – 1) (
от -2 147 483 648 до 2 147 483 647)

Комментариев нет:

Отправить комментарий