Тип памяти |
Кол-во бит |
Возможные значения |
unsigned byte |
8 |
От 0 до 255 |
unsigned word |
16 |
От 0 до 65535 |
unsigned double word |
32 |
От 0 до 4294967295 |
unsigned quad word |
64 |
От 0 до 18 446 744 073 709 551 615 |
Отличаются ли целые числа, к использованию которых мы привыкли, от их реализации в ЭВМ? К сожалению, на этот вопрос приходится отвечать утвердительно. Дело в том, что известные нам еще из курса арифметики целые числа представляют собой бесконечное множество, которое можно наглядно изобразить в виде числовой оси:
0 1 … 254 255 256 257
Где за 0 следует 1, за ней идет 2 … за 255 следует число 256 и т.д. Теперь рассмотрим байт. За числом 0, так же следует 1, за ней идет 2 …, за 254 идет 255. Посмотрим, как это число выглядит в двоичной записи: 25510 = 111111112. Т.е. для записи этого числа требуется каждый бит рассматриваемого нами байта заполнить единицами. Поэтому попытка увеличить данное число на единицу, т.е. перейти к следующему значению приведет к привычному для нас в десятичной системе результату 25610 = 1 000000002, но для двоичного представления этого числа байта уже недостаточно, поскольку восемь разрядов байта будут заняты нулями, а единица девятого разряда будет утеряна. Поэтому целые числа, для представления которых используется один байт, можно наглядно изобразить в виде числовой окружности (Рис.2.1.), на которой за 0 следует 1, за ней идет 2 …, за 254 следует 255, а за этим числом идет 0.
Другими словами, целые положительные числа в машинном представлении упорядочены таким образом, что за максимальным целым числом данного типа следует ноль.
255 0 1
Рис. 2.1. Числовая окружность для целых положительных чисел, размерности 1 байт.
Для представления целых чисел со знаком старший бит выделяемой области памяти отводят под знак числа. При этом принято полагать, что значение ноль этого бита соответствует положительному числу, а единица – отрицательному. К сожалению, такого простого решения оказывается недостаточно. Дело в том, принятие данного алгоритма порождает два различных значения для нуля. Например, для целого числа занимающего байт, первое значение это +0 = 00000000, а второе значение это –0 =10000000. Решение этой проблемы нетрудно найти из рассмотрения числовой окружности, изображенной на рис.1. Действительно «раскручивая» эту окружность в другую сторону, легко прийти к выводу, что значению –1 должен соответствовать код числа 255, -2 соответственно – код 254, и т.п. потому и постольку, поскольку должно быть –1 + 1 = 0, что и реализуется в случае целых чисел размером в байт: 25510 + 1 = 0.
Такой способ представления целых со знаком называется представлением в дополнительном коде. Обратным кодом числа называется запись, получаемая путем замены всех двоичных цифр задействованных в его представлении на противоположное значение. Легко видеть, что дополнительный код числа получается из обратного путем прибавления к нему единицы.
Пример. Определим, какой код соответствует величине -12810. Запишем 12810 в двоичном виде: 100000002. Обратный код этого числа есть: 011111112 следовательно дополнительный код будет 100000002 .
Возможные интервалы значений целых чисел со знаком в зависимости от размера памяти, выделяемой для их представления, приведены в следующей таблице 2.2:
Таблица 2.2
Тип памяти |
Кол-во бит |
Возможные значения |
signed byte |
8 |
От -128 до 127 |
signed word |
16 |
От –32768 до 32767 |
signed double word |
32 |
От –2147483648 до 2147483647 |
signed quad word |
64 |
От –9223372036854775808до 9223372036854775807 |
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.