Логические операции. В Си используются следующие обозначения для логических операций: || логическое "или" (логическое сложение)&& логическое "и"
В Си используются следующие обозначения для логических операций:
|| логическое "или" (логическое сложение)&& логическое "и" (логическое умножение) ! логическое "не" (логическое отрицание)Логические константы "истина" и "ложь" обозначаются через true и false (это ключевые слова языка). Примеры логических выражений:
bool a, b, c, d;int x, y; a = b || c; // логическое "или"d = b && c; // логическое "и"a = !b; // логическое "не"a = (x == y); // сравнение в правой частиa = false; // ложьb = true; // истинаc = (x > 0 && y != 1); // c истинно, когда // оба сравнения истинныСамый высокий приоритет у операции логического отрицания, затем следует логическое умножение, самый низкий приоритет у логического сложения.
Унарные и бинарные операции
По количеству операндов, участвующих в операции, операции подразделяются на унарные, бинарные и тернарные.
В языке Си имеются следующие унарные операции:
- арифметическое отрицание (отрицание и дополнение);
~ побитовое логическое отрицание (дополнение);
! логическое отрицание;
* разадресация (косвенная адресация);
& вычисление адреса;
+ унарный плюс;
++ увеличение (инкремент);
-- уменьшение (декремент);
sizeof размер .
Унарные операции выполняются справа налево.
Операции увеличения и уменьшения увеличивают или уменьшают значение операнда на единицу и могут быть записаны как справа так и слева от операнда. Если знак операции записан перед операндом (префиксная форма), то изменение операнда происходит до его использования в выражении. Если знак операции записан после операнда (постфиксная форма), то операнд вначале используется в выражении, а затем происходит его изменение.
Пример
++A префиксная форма
A++ постфиксная форма
Пример
#include<stdio.h>
#include <math.h>
void main(void)
{//демонстрирует различия в выражениях
//a++;++a;
int a=20;
int b=40;
a++;
++b;
printf("a = %d b = %d \n",a,b);
printf("a = %d b = %d \n",a++,++b);
}
Результат
В отличие от унарных, бинарные операции, список которых приведен в табл., выполняются слева направо.
Таблица
Знак операции | Операция | Группа операций |
* | Умножение | Мультипликативные |
/ | Деление | |
% | Остаток от деления | |
+ | Сложение | Аддитивные |
- | Вычитание | |
<< | Сдвиг влево | Операции сдвига |
>> | Сдвиг вправо | |
< | Меньше | Операции отношения |
<= | Меньше или равно | |
>= | Больше или равно | |
== | Равно | |
!= | Не равно | |
& | Поразрядное И | Поразрядные операции |
| | Поразрядное ИЛИ | |
^ | Поразрядное исключающее ИЛИ | |
&& | Логическое И | Логические операции |
|| | Логическое ИЛИ | |
, | Последовательное вычисление | Последовательного вычисления |
= | Присваивание | Операции присваивания |
*= | Умножение с присваиванием | |
/= | Деление с присваиванием | |
%= | Остаток от деления с присваиванием | |
-= | Вычитание с присваиванием | |
+= | Сложение с присваиванием | |
<<= | Сдвиг влево с присваиванием | |
>>= | Сдвиг вправо присваиванием | |
&= | Поразрядное И с присваиванием | |
|= | Поразрядное ИЛИ с присваиванием | |
^= | Поразрядное исключающее ИЛИ с присваиванием |
Левый операнд операции присваивания должен быть выражением, ссылающимся на область памяти (но не объектом объявленным с ключевым словом const), такие выражения называются леводопустимыми к ним относятся:
- идентификаторы данных целого и плавающего типов, типов указателя, структуры, объединения;
- индексные выражения, исключая выражения имеющие тип массива или функции;
- выражения выбора элемента (->) и (.), если выбранный элемент является леводопустимым;
- выражения унарной операции разадресации (*), за исключением выражений, ссылающихся на массив или функцию;
- выражение приведения типа если результирующий тип не превышает размера первоначального типа.
При записи выражений следует помнить, что символы (*), (&), (!), (+) могут\ обозначать унарную или бинарную операцию.
Дата добавления: 2016-04-14; просмотров: 1125;