Введение в операторы C и приоритет операторов
C предлагает нам широкий спектр операторов, которые мы можем использовать для работы с данными.
В частности, мы можем выделить различные группы операторов:
- арифметические операторы
- операторы сравнения
- логические операторы
- составные операторы присваивания
- побитовые операторы
- указательоператоры
- структурные операторы
- разные операторы
В этом сообщении в блоге я подробно расскажу обо всех, используя 2 мнимые переменные.a
иb
в качестве примеров.
Я исключил из этого списка побитовые операторы, операторы структуры и операторы указателей, так как посвящу им отдельную запись в блоге.
Арифметические операторы
В этой группе макросов я разделю бинарные операторы и унарные операторы.
Бинарные операторы работают с двумя операндами:
Оператор | Имя | Пример |
---|---|---|
= |
Назначение | a = b |
+ |
Добавление | a + b |
- |
Вычитание | a - b |
* |
Умножение | a * b |
/ |
Разделение | a / b |
% |
По модулю | a % b |
Унарные операторы принимают только один операнд:
Оператор | Имя | Пример |
---|---|---|
+ |
Унарный плюс | +a |
- |
Унарный минус | -a |
++ |
Инкремент | a++ или же++a |
-- |
Декремент | a-- или же--a |
Разница междуa++
и++a
в том, чтоa++
увеличиваетa
переменная после ее использования.++a
увеличиваетa
переменная перед ее использованием.
Например:
int a = 2;
int b;
b = a++ /* b is 2, a is 3 */
b = ++a /* b is 4, a is 4 */
То же самое и с оператором декремента.
Операторы сравнения
Оператор | Имя | Пример |
---|---|---|
== |
Равный оператор | a == b |
!= |
Неравный оператор | a != b |
> |
Больше чем | a > b |
< |
Меньше, чем | a < b |
>= |
Больше или равно | a >= b |
<= |
Меньше или равно | a <= b |
Логические операторы
!
НЕ (пример:!a
)&&
И (пример:a && b
)||
ИЛИ (пример:a || b
)
Эти операторы отлично подходят для работы с логическими значениями.
Составные операторы присваивания
Эти операторы полезны для выполнения присваивания и в то же время выполнения арифметической операции:
Оператор | Имя | Пример |
---|---|---|
+= |
Дополнительное задание | a += b |
-= |
Присваивание вычитания | a -= b |
*= |
Присваивание умножения | a *= b |
/= |
Назначение дивизиона | a /= b |
%= |
Присваивание по модулю | a %= b |
Разные операторы
Тернарный оператор
Тернарный оператор - единственный оператор вCкоторый работает с 3 операндами, и это короткий способ выражения условных выражений.
Вот как это выглядит:
<condition> ? <expression> : <expression>
Пример:
a ? b : c
Еслиa
оценивается какtrue
, тоb
оператор выполняется, иначеc
является.
Тернарный оператор функционально такой же, как условный оператор if / else, за исключением того, что он короче для выражения и может быть встроен в выражение.
размер
Вsizeof
оператор возвращает размер переданного операнда. Вы можете передать переменную или даже тип.
Пример использования:
#include <stdio.h>
int main(void) {
int age = 37;
printf("%ld\n", sizeof(age));
printf("%ld", sizeof(int));
}
Приоритет оператора
Со всеми этими операторами (и многими другими, о которых я не рассказывал в этой статье, включая побитовые, структурные операторы и операторы указателей), мы должны обращать внимание на их совместное использование в одном выражении.
Предположим, у нас есть такая операция:
int a = 2;
int b = 4;
int c = b + a * a / b - a;
Какая ценностьc
? Получаем ли мы, что сложение выполняется до умножения и деления?
Есть набор правил, которые помогают нам решить эту головоломку.
В порядке от меньшего приоритета к большему у нас есть:
- в
=
оператор присваивания - в
+
и-
двоичныйоператоры - в
*
и/
операторы - в
+
и-
унарные операторы
У операторов также есть правило ассоциативности, которое всегда выполняется слева направо, за исключением унарных операторов и присваивания.
В:
int c = b + a * a / b - a;
Мы сначала выполняемa * a / b
, которые из-за того, что они расположены слева направо, мы можем разделить наa * a
и результат/ b
:2 * 2 = 4
,4 / 4 = 1
.
Затем мы можем выполнить суммирование и вычитание: 4 + 1 - 2. Значениеc
является3
.
Однако во всех случаях я хочу убедиться, что вы понимаете, что можете использовать круглые скобки, чтобы облегчить чтение и понимание любого похожего выражения.
Круглые скобки имеют более высокий приоритет над чем-либо еще.
Вышеупомянутый пример выражения можно переписать как:
int c = b + ((a * a) / b) - a;
и нам не нужно так много думать об этом.
Скачать мою бесплатнуюСправочник C
Больше уроков по clang:
- Введение в язык программирования C
- C Переменные и типы
- Константы C
- Операторы C
- C Условные выражения
- Как работать с петлями на C
- Введение в массивы C
- Как определить длину массива в C
- Введение в строки C
- Как найти длину строки в C
- Введение в указатели C
- Цикл по массиву с помощью C
- Логические значения в C
- Введение в функции C
- Как использовать NULL в C
- Основные концепции ввода-вывода в C
- Двойные кавычки против одинарных кавычек в C
- Как вернуть строку из функции C
- Как решить неявное объявление предупреждения библиотечной функции в C
- Как проверить значение символа в C
- Как напечатать процентный символ с помощью printf () на C
- Спецификаторы и модификаторы преобразования C
- Как получить доступ к параметрам командной строки в C
- Объем переменных в C
- Можете ли вы вкладывать функции в C?
- Статические переменные в C
- C Глобальные переменные
- Ключевое слово typedef в C
- C Перечислимые типы
- Структуры C
- Заголовочные файлы C
- Препроцессор C