Множество целых чисел,
представимых в памяти ЭВМ, ограничено. Диапазон значений зависит от размера
области памяти, используемой для размещения чисел. В 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
1 00000000 00000000 – 1 = 216 – 1 = 65 535
Для записи чисел со знаком
старший (левый) разряд отводится под знак числа. Если число неотрицательное, то
в знаковый разряд записывается 0, в противном случае – 1, т.е. единица в
знаковом разряде означает знак “минус”.
Целые числа со знаком могут быть записаны в прямом, обратном и дополнительном коде.
- В прямом коде число хранится в виде: знак+абсолютное значение (модуль) числа.
- В обратном коде в значении числа нули заменяют на единицы, а единицы на нули.
- Дополнительный код получают путем прибавления 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.
от -128 до 127.
Аналогично, диапазон значений
двухбайтовых целых чисел:
-215 - +(215 -1) (от -32768 до 32767).
-215 - +(215 -1) (от -32768 до 32767).
Диапазон значений четырехбайтовых
целых чисел со знаком:
-231 - +(231 – 1) (от -2 147 483 648 до 2 147 483 647)
-231 - +(231 – 1) (от -2 147 483 648 до 2 147 483 647)
Комментариев нет:
Отправить комментарий