|
<> | Не равно | X1 <> X2 | Логическое значение True, если значения X1 и X2 различны, и False в противном случае |
< | Меньше чем | X1 < X2 | Логическое значение True, если значение X1 меньше значения X2 в смысле, определенном для типа этих значений, и False в противном случае |
- 174 -
> | Больше чем | X1 > X2 | Логическое значение True, если значение X1 больше значения X2 в смысле, определенном для типа этих значений, и False в противном случае |
<= | Меньше или равно | X1<=X2 | Логическое значение True, если значение X1 не больше значения X2 в смысле, определенном для типа этих значений, и False в противном случае |
>= | Больше или равно | X1>=X2 | Логическое значение True, если значение X1 не меньше значения X2 в смысле, определенном для типа этих значений, и False в противном случае |
Когда операции отношения применяются для операндов простых типов, то это должны быть совместимые типы. Однако, если один операнд имеет вещественный тип, то другой может быть целого типа. Можно сравнивать и логические значения. Всегда выполняется True>False.
Обычно логические выражения встречаются в программе либо в операторах управления с условием (IF, WHILE, REPEAT...UNTIL и др.), либо в присваивании значений в логические переменные. С помощью приведения типов можно вставлять логические выражения прямо в числовые. Например, если надо ограничить величину X, например, значением 15, то обычно строится конструкция
if X>15 then X:=X-15;
Но если учесть, что False хранится как байт со значением 0, a True — как байт со значением 1, то можно обойтись без if:
X := X - 15 * Byte( X>15 );
Здесь 15 вычтется только, если (X>15)=True, что значит 1. Иначе же, вычтется 15*0. Можно и из байтов делать логические значения приведением к типу Boolean. Но тут надо помнить, что
Boolean( X ) = False, если X=0,
Boolean( X ) = True , если X<>0.
Значение X должно иметь тип Byte. Как видно, ненулевое значение всегда «истинно».
- 175 -
Еще одно замечание: при сравнении вещественных значений нельзя быть уверенным в его корректности. Например, выражения X и ( 2.23 * X / 2.23 ) формально тождественны, но из-за ошибок округления в вещественном типе будут различаться. Еще большие проблемы возникают при работе с расширенным набором вещественных типов, разрешенных при наличии математического сопроцессора 80X87. Советуем посмотреть разд. 9.5, посвященный использованию сопроцессора, где рассказывается, как бороться с подобными трудностями.