Если бы значения в выборке были целыми и имели диапазон 0..3 (т.е. занимали два бита), то можно было бы в один байт уместить четыре таких значения и т.д. Логика останется той же, изменятся лишь параметры в процедурах преобразования.
К сожалению, подобный подход нельзя применить к вещественным значениям. Единственное, что можно посоветовать — это посмотреть, нужны ли именно вещественные формы хранения данных. Так, если хранится массив вещественных (Real — 6 байт на элемент) значений размеров чего-либо в метрах с точностью до сантиметра, и самое длинное измерение не превосходит 2,55 м, то гораздо эффективнее будет хранить их как массив размеров в сантиметрах. И одно значение будет свободно размещаться в одном байте! Тип Byte занимает 1 байт — экономия шестикратная.
- 171 -
| { Процедура кодирования X1 и X2 в один байт (X1, X2<=15) }
| PROCEDURE Code2to1( X1,X2 : Byte; VAR X1X2 : Byte );
| BEGIN
| >X1X2 := X1 + (X2 shl 4 )
| END;
| >{Процедура декодирования X1 и X2 из одного байта }
| PROCEDURE DeCode1to2{ X1X2 : Byte; VAR X1,X2 : Byte );
| BEGIN
| >X1 := X1X2 and 15; { X1X2 and $F }
| >X2 := X1X2 shr 4
| >END; VAR {== ПРИМЕР ВЫЗОВА ==}
| >C, C1, C2 : Byte;
| BEGIN
| >Code2to1(8,7, C);
| >WriteLn('8 и 7 - кодируются в —> ',C);
| >DeCode1to2(C, C1, C2);
| >WriteLn(C:3, — декодируются в --> ',C1:-3,' и ',C2);
| >ReadLn { пауза до нажатия клавиши ввода }
| END.
Рис. 9.2
9.3. Логические вычисления и операции отношения
Наличие логического типа Boolean и операций с ним позволяет программировать логические вычисления, причем запись логических выражений будет соответствовать законам Булевой алгебры.
В Турбо Паскале введены четыре логических операции (табл. 9.4, где L1 и L2 — логические константы, переменные или выражения, равные True или False).
Таблица 9.4
| Название | Запись | Результат операции |
not | Логическое 'НЕ' (отрицание) | not A1 | Логическое значение, противоположное значению L1 |
and | Логическое 'И' (конъюнкция) | L1 и L2 | Логическое значение True, если L1 и L2 равны True, и False во всех остальных случаях |
- 172 -
or | Логическое 'ИЛИ' (дизъюнкция) | L1 or L2 | Логическое значение True, если хотя бы одно из значений L1 или L2 равно True, и False, если L1 и L2 равны False |
xor | Логическое исключающее 'ИЛИ' | L1 xor L2 | Логическое значение True, если значения L1 и L2 различны, и False, если они равны |
Результат операции всегда имеет тип Boolean и может иметь только одно из двух значений : True (истинно) или False (ложно). Логические операции имеют различные приоритеты (см. табл. 9.1), и в случае, если L1 и L2 сами являются логическими выражениями, лучше расставлять скобки, явно задавая порядок логических вычислений. Так, например, запись