Программирование в среде Турбо Паскаль (Поляков, Круглов) - страница 106

Общая формула для значений типов Byte и Word имеет вид

Byte : Значение = B7*27 + B6*2б + B5*25 +...+ B1*2* + B0;

Word : Значение = B15*215 + B14*214+...+B7*27 +...+ B0.

Множители B0, B1 и т.п. — это значения соответствующих битов, равные либо 0, либо 1, а числовые множители — это 2 в степени номера бита.

- 165 -

Внутреннее отличие имеют представления целых типов со знаком: ShortInt, Integer и LongInt. По размеру тип ShortInt равен типу Byte, a Integer — типу Word. Но они могут хранить отрицательные целые числа, правда, меньшие по абсолютному значению чем 255 и 65535:


ShortInt : -128 ..127 ( 8 бит ),

Integer : -32768 .. 32767 ( 16 бит ),

LongInt : -2147483648 .. 2147483647 ( 32 бит ).

Самый левый бит в представлении отрицательного числа всегда равен 1, если значение отрицательное, и 0 в противном случае. Формула перевода битов в значение для типов ShortInt, Integer, LongInt такова:

Shortlnt : Знач= -B7*27 + B6*26 + B5*25 +...+ B1*21 + B0;

Integer : Знач=-B15*215 + B14*214+...+B7*27 +...+ B0;

LongInt : Знач=-B31*231 + B30*230+...+B15*215 +...+ B0;

Примеры кодировки отрицательных чисел для типа ShortInt (бит знака числа отделен здесь пробелом) :

-1 :1 1111111 ( -1*128 + 127 )

-2 : 1 1111110 ( -1*128 + 126 )

-3 : 1 1111101 ( -1*128 + 125 )

-125 : 1 0000011 ( -1*128 + 3 )

-128 : 1 0000000 ( -1*128 + 0 )

Если в кодировании положительных значений абсолютное значение числа тем больше, чем больше единиц в его записи, то для отрицательных значений нули и единицы как бы поменяются местами — и абсолютное значение числа тем больше, чем больше будет в записи нулей. Поэтому, например, двоичное представление того же числа -128 в формате Integer (это уже 16 бит) будет 11111111 10000000.

Вещественные типы кодируются каждый раз по-разному, но всегда достаточно сложно: одна группа битов составляет мантиссу числа, вторая — порядок, да еще знак... Битовые операции к вещественным числам (типам) не применяются.

Посмотреть двоичную форму представления целых чисел можно с помощью функции (рис. 9.1). Операции shl и shr из примера на рис. 9.1 будут рассмотрены чуть позже.

- 166 -


| { ФУНКЦИЯ ПЕРЕВОДА ЦЕЛОГО ЧИСЛА В ДВОИЧНОЕ ПРЕДСТАВЛЕНИЕ}

| { X - целое число (можно передавать и другие типы ) }

| { NumOfBits - число позиций в двоичном представлении }

| FUNCTION Binary( X:LongInt; NumOfBits : Byte ) : String;

| VAR

| > bit, i : Byte; { вспомогательные переменные }

| > s : String[32];

| BEGIN

| > s: = ' '; { обязательная чистка строки }

| >for i:=0 to 31 do begin { цикл перевода }

| > bit := ( X shl i ) shr ( 31 ); { выделение бита }