Логические операции предназначены для помощи в управлении потоком выполнения программы или изменения данных, в зависимости от различных условий. Они очень похожи на соответствующие операторы языка C, по возможности сохранена их семантика.
!
Формат вызова:
(! <parameter>)
возвращает bool, принимает 1 параметр;
тип параметра bool, разрешены любые операнды, массив не разрешен;
назначение операции: логическое "нет", возвращает инверсное значение параметра, например:
if( ! boolvariable )
{};
!!
Форматы вызова:
!! <parameter>;
(!! <parameter>)
возвращает bool, принимает 1 параметр;
тип параметра bool, разрешена только переменная, массив не разрешен;
назначение операции: логическое "нет", инвертирует значение принимаемой логической переменной, и может возвращать результат, например:
!! value; `эквивалентно value = (! value );
>
Форматы вызова:
(> <parameter0> <parameter1>)
(<parameter0> > <parameter1>)
возвращает bool, принимает 2 параметра;
первый параметр – тип любой, разрешены любые операнды, массив не разрешен;
второй параметр такого же типа, как первый, разрешены любые операнды, массив не разрешен;
назначение операции: логическое "больше", возвращает TRUE, если значение первого параметра больше второго, иначе возвращает FALSE, допустима инфиксная запись, например:
if( a > b )
{}
<
Форматы вызова:
(< <parameter0> <parameter1>)
(<parameter0> < <parameter1>)
возвращает bool, принимает 2 параметра;
первый параметр – тип любой, разрешены любые операнды, массив не разрешен;
второй параметр такого же типа, как первый, разрешены любые операнды, массив не разрешен;
назначение операции: логическое "меньше", возвращает TRUE, если значение первого параметра меньше второго, иначе возвращает FALSE, допустима инфиксная запись, например:
if( a < b )
{}
==
Форматы вызова:
(== <parameter0> <parameter1>)
(<parameter0> == <parameter1>)
возвращает bool, принимает 2 параметра;
первый параметр – тип любой, разрешены любые операнды, массив не разрешен;
второй параметр такого же типа, как первый, разрешены любые операнды, массив не разрешен;
назначение операции: логическое "равно", возвращает TRUE, если значения параметров равны, иначе возвращает FALSE, допустима инфиксная запись, например:
if( a == b )
{}
!=
Форматы вызова:
(!= <parameter0> <parameter1>)
(<parameter0> != <parameter1>)
возвращает bool, принимает 2 параметра;
первый параметр – тип любой, разрешены любые операнды, массив не разрешен;
второй параметр такого же типа, как первый, разрешены любые операнды, массив не разрешен;
назначение операции: логическое "не равно", возвращает TRUE, если значения параметров не равны, иначе возвращает FALSE, допустима инфиксная запись, например:
if( a != b )
{}
>=
Форматы вызова:
(>= <parameter0> <parameter1>)
(<parameter0> >= <parameter1>)
возвращает bool, принимает 2 параметра;
первый параметр – тип любой, разрешены любые операнды, массив не разрешен;
второй параметр такого же типа, как первый, разрешены любые операнды, массив не разрешен;
назначение операции: логическое "больше или равно", возвращает TRUE, если значение первого параметра больше или равно второму, иначе возвращает FALSE, допустима инфиксная запись, например:
if( a >= b )
{}
<=
Форматы вызова:
(<= <parameter0> <parameter1>)
(<parameter0> <= <parameter1>)
возвращает bool, принимает 2 параметра;
первый параметр – тип любой, разрешены любые операнды, массив не разрешен;
второй параметр такого же типа, как первый, разрешены любые операнды, массив не разрешен;
назначение операции: логическое "меньше или равно", возвращает TRUE, если значение первого параметра меньше или равно второму, иначе возвращает FALSE, допустима инфиксная запись, например:
if( a <= b )
{}
<>
Форматы вызова:
(<> <parameter0> <parameter1> <parameter2>)
(<parameter0> <> <parameter1> <parameter2>)
возвращает bool, принимает 3 параметра;
первый параметр – тип любой, разрешены любые операнды, массив не разрешен;
второй параметр такого же типа, как первый, разрешены любые операнды, массив не разрешен;
третий параметр такого же типа, как первый, разрешены любые операнды, массив не разрешен;
назначение операции: логическая проверка значения на попадание в указанный диапазон, первый параметр задает проверяемое значение, второй параметр нижнюю границу, а третий верхнюю границу диапазона, функционально эквивалентно выражению
((param0 < param1) || (param0 > param2))
например:
if( a <> lowval highval )
{}
Основное назначение – проверка вещественных чисел на попадание в заданный диапазон, поскольку использование для вещественных чисел проверки на равенство не совсем корректно из-за возможного шума в младших разрядах после вычислений или проведения измерений, то есть, вместо
float a b;
if( a == b )
{}
надо использовать:
float a b delta 0.0001;
if( a <> (b – delta)(b + delta) )
{}
где delta – небольшое вещественное число, задающее погрешность сравнения, зависит от требуемой точности вычислений или измерений.
&&
Форматы вызова:
(&& <parameter0> <parameter1> [<parameter2>...<parameter31>])
(<parameter0> && <parameter1> [<parameter2>...<parameter31>])
возвращает bool, число параметров от 2 до максимально допустимого;
все параметры типа bool, допустимы любые операнды, массивы не допустимы;
назначение операции: логическое "И" (логическое умножение), возвращает TRUE, если значения всех параметров равны TRUE, иначе возвращает FALSE, допустима инфиксная запись. Примеры:
if((a <= b) && (с == d ))
{}
bool a b c d e; c = (&& b d e a);
if( && (a == b) (c == d) (e == 100))
{puts "something"};
||
Форматы вызова:
(|| <parameter0> <parameter1> [<parameter2>...<parameter31>])
(<parameter0> || <parameter1> [<parameter2>...<parameter31>])
возвращает bool, число параметров от 2 до максимально допустимого;
все параметры типа bool, допустимы любые операнды, массивы не допустимы;
назначение операции: логическое "ИЛИ" (логическое сложение), возвращает TRUE, если значение хотя бы одного из параметров равно TRUE, иначе (если все FALSE) возвращает FALSE, допустима инфиксная запись. Примеры:
if((a <= b) || (с == d))
{}
bool a b c d e;
c = (|| a b d e);
?
Форматы вызова:
(? <parameter0> <parameter1> <parameter2>)
(<parameter0> ? <parameter1> <parameter2>)
возвращает значение любого типа, число параметров 3;
первый параметр типа bool, все виды операндов, массив недопустим;
второй параметр любого типа, для которого допустимо присваивание, допустимы все виды операндов, массив недопустим;
третий параметр любого типа, для которого допустимо присваивание, допустимы все виды операндов, массив недопустим;
назначение операции: логический выбор, если значение первого параметра TRUE, то возвращает значение второго, иначе третьего параметра, тип возврата такой же, как у первого параметра, допустима инфиксная запись, например:
str s;
bool b;
s = (b ? "истина" "ложь");
если b == TRUE, то s присвоится слово истина, иначе присвоится слово ложь.
При использовании в выражении типа
var = par1 ? par2 par3;
эквивалентно:
if( par1)
{ var = par2 }
`else` {var = pa3};
но выполняется гораздо быстрее и позволяет не создавать промежуточные переменные при необходимости использования в сложных ситуациях (в выражениях).