Общая формула для значений типов 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 ); { выделение бита }