C Операторы
Оператор — это символ, который сообщает компилятору выполнить определённые математические или логические операции. В языке C есть богатый набор встроенных операторов, и он предоставляет следующие типы операторов:
- Арифметические операторы
- Операторы отношения
- Логические операторы
- Побитовые операторы
- Операторы присваивания
- Прочие операторы
В этой главе будут последовательно рассмотрены арифметические операторы, операторы отношения, логические операторы, побитовые операторы, операторы присваивания и другие операторы.
Арифметические операторы
В следующей таблице показаны все арифметические операторы, поддерживаемые языком C. Предположим, переменнаяAимеет значение 10, переменнаяBимеет значение 20, тогда:
| Операторы | Описание | Пример |
|---|---|---|
| + | Складывает два операнда. | A + B даст 30 |
| - | Вычитает второй операнд из первого операнда. | A - B даст -10 |
| * | Умножает два операнда. | A * B даст 200 |
| / | Числитель, делённый на знаменатель | B / A даст 2 |
| % | Оператор взятия остатка, остаток после целочисленного деления. | B % A даст 0 |
| ++ | Оператор инкремента увеличивает целочисленное значение на 1. | A++ даст 11 |
| -- | Оператор декремента уменьшает целочисленное значение на 1. | A-- даст 9 |
Пример
См. следующий пример, чтобы изучить все доступные арифметические операторы в C:
Пример
Когда приведённый выше код компилируется и выполняется, он выдаёт следующий результат:
Line 1 - c 的值是 31 Line 2 - c 的值是 11 Line 3 - c 的值是 210 Line 4 - c 的值是 2 Line 5 - c 的值是 1 Line 6 - c 的值是 21 Line 7 - c 的值是 22
В следующем примере показана разница между a++ и ++a:
Пример
Вывод выполнения вышеуказанной программы:
先赋值后运算: Line 1 - c 的值是 10 Line 2 - a 的值是 11 Line 3 - c 的值是 10 Line 4 - a 的值是 9 先运算后赋值: Line 5 - c 的值是 11 Line 6 - a 的值是 11 Line 7 - c 的值是 9 Line 8 - a 的值是 9
Операторы отношения
В следующей таблице показаны все операторы отношения, поддерживаемые языком C. Предположим, переменнаяAимеет значение 10, переменнаяBимеет значение 20, тогда:
| Операторы | Описание | Пример |
|---|---|---|
| == | Проверяет, равны ли значения двух операндов. Если они равны, условие истинно. | (A == B) ложно. |
| != | Проверяет, равны ли значения двух операндов. Если они не равны, условие истинно. | (A != B) истинно. |
| > | Проверяет, больше ли значение левого операнда, чем значение правого операнда. Если да, условие истинно. | (A > B) ложно. |
| < | Проверяет, меньше ли значение левого операнда, чем значение правого операнда. Если да, условие истинно. | (A < B) истинно. |
| >= | Проверяет, больше ли значение левого операнда или равно значению правого операнда. Если да, условие истинно. | (A >= B) ложно. |
| <= | Проверяет, меньше ли значение левого операнда или равно значению правого операнда. Если да, условие истинно. | (A <= B) истинно. |
Пример
См. следующий пример, чтобы изучить все доступные операторы отношения в C:
Пример
Когда приведённый выше код компилируется и выполняется, он выдаёт следующий результат:
Line 1 - a 不等于 b Line 2 - a 不小于 b Line 3 - a 大于 b Line 4 - a 小于或等于 b Line 5 - b 大于或等于 a
Логические операторы
В следующей таблице показаны все операторы отношения и логические операторы, поддерживаемые языком C. Предположим, переменнаяAимеет значение 1, переменнаяBимеет значение 0, тогда:
| Операторы | Описание | Пример |
|---|---|---|
| && | Называется логическим оператором AND. Если оба операнда не равны нулю, условие истинно. | (A && B) ложно. |
| || | Называется логическим оператором OR. Если хотя бы один из двух операндов не равен нулю, условие истинно. | (A || B) истинно. |
| ! | Называется логическим оператором NOT. Он используется для инвертирования логического состояния операнда. Если условие истинно, логический оператор NOT сделает его ложным. | !(A && B) истинно. |
Пример
Смотрите следующий пример, чтобы изучить все доступные логические операторы в C:
Пример
Когда приведённый выше код компилируется и выполняется, он выдаёт следующий результат:
Line 1 - 条件为真 Line 2 - 条件为真 Line 3 - 条件为假 Line 4 - 条件为真
Побитовые операторы
Побитовые операторы действуют на биты и выполняют операции бит за битом. Таблицы истинности &, | и ^ выглядят следующим образом:
| p | q | p & q | p | q | p ^ q |
|---|---|---|---|---|
| 0 | 0 | 0 | 0 | 0 |
| 0 | 1 | 0 | 1 | 1 |
| 1 | 1 | 1 | 1 | 0 |
| 1 | 0 | 0 | 1 | 1 |
Предположим, A = 60 и B = 13. В двоичном формате они выглядят следующим образом:
A = 0011 1100
B = 0000 1101
-----------------
A&B = 0000 1100
A|B = 0011 1101
A^B = 0011 0001
~A = 1100 0011
В следующей таблице показаны побитовые операторы, поддерживаемые языком C. Предположим, переменнаяAимеет значение 60, переменнаяBимеет значение 13, тогда:
| Операторы | Описание | Пример |
|---|---|---|
| & | Выполняет логическую операцию AND над каждым битом двух операндов. Если оба соответствующих бита равны 1, результат равен 1; в противном случае — 0. Побитовая операция AND выполняет операцию "AND" над двоичными битами. Правила: 0&0=0; 0&1=0; 1&0=0; 1&1=1; | (A & B) даёт 12, что равно 0000 1100. |
| | | Выполняет логическую операцию OR над каждым битом двух операндов. Если оба соответствующих бита равны 0, результат равен 0; в противном случае — 1. Побитовый оператор OR выполняет операцию «OR» над двоичными битами. Правила: 0|0=0; 0|1=1; 1|0=1; 1|1=1; | (A | B) даёт 61, что равно 0011 1101. |
| ^ | Выполняет логическую операцию XOR над каждым битом двух операндов. Если значения двух соответствующих битов одинаковы, результат равен 0; в противном случае он равен 1. Оператор XOR выполняет операцию «XOR» над двоичными битами. Правила: 0^0=0; 0^1=1; 1^0=1; 1^1=0; | (A ^ B) даёт 49, что равно 0011 0001. |
| ~ | Выполняет логическое отрицание каждого бита операнда, то есть заменяет каждый 0 на 1, а каждую 1 на 0. Побитовый оператор NOT выполняет операцию «NOT» над двоичными битами. Правила: ~1=-2; ~0=-1; | (~A ) даст -61, что представляет собой 1100 0011 — дополнительный код знакового двоичного числа. |
| << | Сдвигает все биты операнда влево на указанное количество битов. Сдвиг влево на n битов эквивалентен умножению на 2 в степени n. Оператор побитового сдвига влево. Сдвигает все двоичные биты операнда влево на определённое количество битов (крайние левые двоичные биты отбрасываются, а справа заполняются нулями). | A << 2 даёт 240, что равно 1111 0000. |
| >> | Сдвигает все биты операнда вправо на указанное количество битов. Сдвиг вправо на n битов эквивалентен делению на 2 в степени n. Оператор побитового сдвига вправо. Сдвигает все двоичные биты числа вправо на определённое количество битов. Для положительных чисел слева заполняются нули; для отрицательных чисел слева заполняются единицы; крайние правые биты отбрасываются. | A >> 2 даёт 15, что равно 0000 1111. |
Пример
Смотрите следующий пример, чтобы узнать все доступные побитовые операторы в C:
Пример
Когда приведённый выше код компилируется и выполняется, он выдаёт следующий результат:
Line 1 - c 的值是 12 Line 2 - c 的值是 61 Line 3 - c 的值是 49 Line 4 - c 的值是 -61 Line 5 - c 的值是 240 Line 6 - c 的值是 15
Операторы присваивания
В следующей таблице перечислены операторы присваивания, поддерживаемые языком C:
| Операторы | Описание | Пример |
|---|---|---|
| = | Оператор простого присваивания, присваивает значение правого операнда левому операнду. | C = A + B присвоит значение A + B переменной C |
| += | Оператор сложения с присваиванием: добавляет правый операнд к левому операнду и присваивает результат левому операнду. | C += A эквивалентно C = C + A. |
| -= | Оператор вычитания с присваиванием: вычитает правый операнд из левого операнда и присваивает результат левому операнду. | C -= A эквивалентно C = C - A. |
| *= | Оператор умножения с присваиванием: умножает правый операнд на левый операнд и присваивает результат левому операнду. | C *= A эквивалентно C = C * A. |
| /= | Оператор деления с присваиванием: делит левый операнд на правый операнд и присваивает результат левому операнду. | C /= A эквивалентно C = C / A. |
| %= | Оператор деления по модулю с присваиванием, вычисляет остаток от деления двух операндов и присваивает его левому операнду. | C %= A эквивалентно C = C % A. |
| <<= | Оператор сдвига влево с присваиванием. | C <<= 2 эквивалентно C = C << 2. |
| >>= | Оператор сдвига вправо с присваиванием. | C >>= 2 эквивалентно C = C >> 2. |
| &= | Оператор побитового И с присваиванием. | C &= 2 эквивалентно C = C & 2. |
| ^= | Оператор побитового исключающего ИЛИ с присваиванием. | C ^= 2 эквивалентно C = C ^ 2 |
| |= | Побитовый оператор ИЛИ с присваиванием. | C |= 2 эквивалентно C = C | 2 |
Пример
См. следующий пример, чтобы изучить все доступные операторы присваивания в C:
Пример
Когда приведённый выше код компилируется и выполняется, он выдаёт следующий результат:
Line 1 - = 运算符实例,c 的值 = 21 Line 2 - += 运算符实例,c 的值 = 42 Line 3 - -= 运算符实例,c 的值 = 21 Line 4 - *= 运算符实例,c 的值 = 441 Line 5 - /= 运算符实例,c 的值 = 21 Line 6 - %= 运算符实例,c 的值 = 11 Line 7 - <<= 运算符实例,c 的值 = 44 Line 8 - >>= 运算符实例,c 的值 = 11 Line 9 - &= 运算符实例,c 的值 = 2 Line 10 - ^= 运算符实例,c 的值 = 0 Line 11 - |= 运算符实例,c 的值 = 2
Разные операторы ↦ sizeof & тернарный
В следующей таблице перечислены некоторые другие важные операторы, поддерживаемые языком C, включаяsizeofи? :。
| Операторы | Описание | Пример |
|---|---|---|
| sizeof() | Возвращает размер переменной. | sizeof(a) вернёт 4, где a — целое число. |
| & | Возвращает адрес переменной. | &a; выдаст фактический адрес переменной. |
| * | Указывает на переменную. | *a; будет указывать на переменную. |
| ? : | Условное выражение | Если условие истинно ? то значение X : иначе значение Y |
Пример
См. следующий пример, чтобы изучить все доступные прочие операторы в C:
Пример
Когда приведённый выше код компилируется и выполняется, он выдаёт следующий результат:
Line 1 - 变量 a 的大小 = 4 Line 2 - 变量 b 的大小 = 2 Line 3 - 变量 c 的大小 = 8 a 的值是 4 *ptr 是 4 b 的值是 30 b 的值是 20
Приоритет операторов в C
Приоритет операторов определяет группировку членов выражения. Это влияет на то, как вычисляется выражение. Некоторые операторы имеют более высокий приоритет, чем другие; например, операторы умножения и деления имеют более высокий приоритет, чем операторы сложения и вычитания.
Например, x = 7 + 3 * 2. Здесь x присваивается 13, а не 20, потому что оператор * имеет более высокий приоритет, чем +, поэтому сначала вычисляется умножение 3*2, а затем прибавляется 7.
В следующей таблице операторы перечислены в порядке приоритета от высшего к низшему. Операторы с более высоким приоритетом расположены в верхней части таблицы, а операторы с более низким приоритетом — в нижней. В выражении сначала вычисляются операторы с более высоким приоритетом.
| Категория | Операторы | Ассоциативность |
|---|---|---|
| Постфиксные | () [] -> . ++ - - | Слева направо |
| Унарные | + - ! ~ ++ - - (type)* & sizeof | Справа налево |
| Мультипликативные | * / % | Слева направо |
| Аддитивные | + - | Слева направо |
| Сдвиг | << >> | Слева направо |
| Связь | < <= > >= | Слева направо |
| Равенство | == != | Слева направо |
| Побитовое И | & | Слева направо |
| Побитовое XOR | ^ | Слева направо |
| Побитовое ИЛИ | | | Слева направо |
| Логическое И | && | Слева направо |
| Логическое ИЛИ | || | Слева направо |
| Условия | ?: | Справа налево |
| Присваивание | = += -= *= /= %=>>= <<= &= ^= |= | Справа налево |
| comma | , | Слева направо |
Пример
См. следующий пример, чтобы понять приоритет операторов в C:
Пример
Когда приведённый выше код компилируется и выполняется, он выдаёт следующий результат:
(a + b) * c / d 的值是 90 ((a + b) * c) / d 的值是 90 (a + b) * (c / d) 的值是 90 a + (b * c) / d 的值是 50Другие расширения