Операторы C

Введение в операторы 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: