Операции отношения и логические операции
Больше или равно | = |
Больше | |
Меньше или равно | |
Меньше | |
Равно | == |
Неравно | != |
Логическое «и» | |
Логическое «или» | || |
Отрицание «не» | ! |
Логическое значение «ложь» представляется целым нулевым значением, а значение «истина» представляется любым ненулевым значением
Выражения, связанные логическими операциямии ||, вычисляются слева направо, причем вычисление значения выражения прекращается сразу же, как только становится ясно, будет ли результат истинен или ложен.
Старшинство операциивыше, чем у операции ||.
Программа 86
#include
main()
(
int x, у, z;
x=l; y=l; z=0; x=xy||z; printf(%d\n,x);
x=x|| !yz; printf(%d\n,x) ;
x=y=l; z=x++-l; printf(%d\n,x);printf(%d\n,z) ;
z+=-x++ + ++y; printf(%d\n,x) ; printf(%d\n,z);
z=x/++x; printf(%d\n,x); printf(%d\n,z) ;
}
Результат выполнения программы: 1 1 2 0 3 0 4 1
Битовые операции
Битовое «и»Битовое «или»Битовое исключающее «или»Сдвиг влевоСдвиг вправоИнверсия битов (унарная операция) | |~«»\ ~ |
Программа 87
#include
main()
(
int у, х, z, k;
x=03; y=02; z=01; k=x|yz; printf(%d\n,k) ;
k=x|y~z; printf(%d\n,k) ;
k=x^y~z; printf(%d\n,k) ;
k=xyz; printf(%d\n,k) ;
x=l; y=-l;
k=!x|x; printf(%d\n,k) ;
k=-x|x; printf(%d\n,k) ;
k=x^x; printf(%d\n,k) ;
x
y
y=3; printf(%d\n,y);
}
После выполнения программы получаем следующие результаты:
3 3 1 1 1 -1 0 8 -8 8 1 9 1
Выражения. Конструкции, включающие константы (литералы), переменные, знаки операции, скобки для управления порядком выполнения операций, обращения к функциям, называют выражениями.
Если в выражениях встречаются операнды различных типов,то они преобразуются к общему типу в соответствии с определенными правилами:
• переменные типа char интерпретируются как целые без знака (unsigned);
• переменные типа short автоматически преобразуются в int; если одиниз операндов имеет тип unsigned, то другой (другие) также преобразуется к типу unsigned и результат имеет тип unsigned;
• если один из операндов имеет тип int, то другой (другие) также преобразуется ктипу int и результат имеет тип int;
• если один из операндов имеет тип char, то другой (другие) также преобразуется к типу char и результат имеет тип char;
• во время операции присваивания значение правой части преобразуется к типу левой части, который и становится типом результата;
• в процессе преобразования int в char лишние старшие 8 бит просто отбрасываются. Кроме того, существует возможность точно указывать требуемый тип данных, к которому необходимо привести некоторую величину (в скобках перед этой величиной). Скобки и имя типа вместе образуют операцию, называемую приведением типов.
Например: z=(int)x+(int)y;
ОПЕРАТОРЫ. УПРАВЛЯЮЩИЕ КОНСТРУКЦИИ ЯЗЫКА
Операторы служат основными строительными блоками программы. В языке Си указанием на наличие оператора служит символ «точка с запятой», стоящий в конце него.
Операторы состоят из выражений. Выражение представляет собой объединение операций и операндов. Операндом называется то, над чем выполняется операция.
Оператор присваивания
Общий вид оператора присваивания= ;
Пример: int x, у, а;
х=5;
у=х*2+7;
а=у/4;
Переменные получают значения: х=5, у=17, а=4.
В языке Си разрешается включать присваивания в выражения, т. е. присваивание может рассматриваться как операция с учетом старшинства и влияния скобок.
Пример: а=(у=(х=5)*2+7)/4.
В результате переменная х получает значение 5, причем это значение участвует в дальнейших вычислениях. Затем выполняется умножение (5*2), сложение (10+7) и еще одно присваивание (у=17). Переменная у получает значение 17, после чего производится деление (17/4), результат которого присваивается переменной а.
В языке Си для компактной записи операторов присваивания имеются специальные операции
+=_=*= /= %= Так, следующие две записи на языке Си эквивалентны: i = i+2 и i+=2.
Пример:
int x,y;
х=у=5;
х+=2; /* х увеличить на 2, результат х=7 */ у- =3; /* у уменьшить на 3. результат у=2 7 х*=у; /* х умножить на у, результат х=14 */ .- х/=++у; /* разделить х на увеличенный у; результат у=3,х= 12/3 */
Операция присваивания сама по себе имеет значение (равное значению выражения, стоящего справа от знака =) и может входить в выражения.
Оператор if/else
Общий вид оператора:
If()
else ;
Здесь часть elseявляется необязательной, можно применять и одиночный оператор
If() ;
Вначале вычисляется значение выражения. Оператор выполняется, если значение выражения истинно. Если выражение ложно (его значение равно нулю), и если есть часть с else, то выполняется оператор2.
Программа 88 (нахождение наибольшего из двух целых чисел а и b)
#include
main( )
{
int a,b;
printf(Введите первое число -); scanf(%d, a) ;
printf(Введите второе число — ); scanf(%d, b) ;
if (a==b)
printf(Заданные числа равны.\n);
else
if (ab)
printf(Первое число больше второго.);
else printf(Второе число больше первого.);
}
При программировании требуется аккуратно различать знаки = и ==, потому что в ряде случаев компилятор не сможет обнаружить ошибки, связанной с неправильным использованием знаков этих операций, что приведет к неверным результатам.
В качестве оператора! может стоять любой оператор, в частности, снова оператор if/else. При этом может возникнуть неоднозначность, если во вложенной последовательности операторов if/else часть else опускается. Else всегда соответствует ближайшему предыдущему if, не содержащему else.
Например, в конструкции
if(n0)
if(ab) z=a;
else z=b;
else относится к внутреннему if. Если требуется отнести else к внешнему if, то необходимо использовать фигурныескобки:
if(n0)
{
if(ab) z=a;
} else z=b;
Часто приходится осуществлять выбор более чем из двух вариантов. Чтобы учесть это, конструкция if/else расширяется конструкцией else/if. Распространенный способ выбора по значению из нескольких вариантов:
If ()
else if )
else if ()
else ;
Выражения просматриваются последовательно сверху вниз; как только какое-то выражение становится истинным, выполняется следующий за ним оператор, и на этом вся цепочка заканчивается. Последняя часть else,как и раньше, может быть опущена.
В языке Си имеется компактный способ записи одного из видов оператора if/else. Он называется «условным выражением» или «тернарной операцией». Такое выражение выглядит в общем виде так:
В1?В2:ВЗ
Сначала вычисляется значение выражения В1. Если оно отлично от нуля (истинно), то вычисляется значение выражения В2, которое и становится значением условного выражения. В противном случае вычисляется значение выражения ВЗ, и оно становится значением условного выражения.
Условное выражение удобно использовать в тех случаях, когда имеется некоторая переменная, которой можно присвоить одно из двух возможных значений. Типичными примерами являются присваивание переменной значения большей из двух величин:
max = (ab)?a:b;
и нахождение абсолютногозначения числа:
х = (у
Статьи к прочтению:
Java SE. Урок 9. Арифметические и логические операции. Операторы отношения. Класс Math
Похожие статьи:
-
Операторы отношения и логические операторы
В предыдущем примере использовался интуитивно понятный, но не рассмотренный ранее оператор «». Это один из операторов отношения, которые позволяют…
-
Поразрядные (побитовые) операции в языке с.
Алгоритмом называется точная инструкция исполнителю в понятной для него форме, определяющая процесс достижения поставленной цели на основе имеющихся…