Типы данных. Системы счисления. Перевод чисел из одной системы счисления в другую. Типы данных и форматы их представления, страница 3

Тип памяти

Кол-во бит

Возможные значения

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