мета-данные страницы
  •  

Различия

Показаны различия между двумя версиями страницы.

Ссылка на это сравнение

Предыдущая версия справа и слеваПредыдущая версия
Следующая версия
Предыдущая версия
c:c_ultimate_guide:operators [2025/10/09 13:45] radi0devc:c_ultimate_guide:operators [2025/11/09 12:07] (текущий) – внешнее изменение A User Not Logged in
Строка 35: Строка 35:
 Унарный оператор:  Унарный оператор: 
   * ''!'' - не   * ''!'' - не
 +
 +===== Операторы присвоения =====
 +
 +
 +представляют из себя сокрашенные выражения
 +
 +++++список|
 +
 +  * ''+='' - присваивание после сложения. Присваивает левому операнду сумму левого и правого операндов: A += B эквивалентно A = A + B
 +  * ''-='' - присваивание после вычитания. Присваивает левому операнду разность левого и правого операндов: A -= B эквивалентно A = A - B
 +  * ''*='' - присваивание после умножения. Присваивает левому операнду произведение левого и правого операндов: A *= B эквивалентно A = A * B
 +  * ''/='' - присваивание после деления. Присваивает левому операнду частное левого и правого операндов: A /= B эквивалентно A = A / B
 +  * ''%='' - присваивание после деления по модулю. Присваивает левому операнду остаток от целочисленного деления левого операнда на правый: A %= B эквивалентно A = A % B
 +  * ''<<='' - присваивание после сдвига разрядов влево. Присваивает левому операнду результат сдвига его битового представления влево на определенное количество разрядов, равное значению правого операнда: A <<= B эквивалентно A = A << B
 +  * ''>>='' - присваивание после сдвига разрядов вправо. Присваивает левому операнду результат сдвига его битового представления вправо на определенное количество разрядов, равное значению правого операнда: A >>= B эквивалентно A = A >> B
 +  * ''&='' - присваивание после поразрядной конъюнкции. Присваивает левому операнду результат поразрядной конъюнкции его битового представления с битовым представлением правого операнда: A &= B эквивалентно A = A & B
 +  * ''|='' - присваивание после поразрядной дизъюнкции. Присваивает левому операнду результат поразрядной дизъюнкции его битового представления с битовым представлением правого операнда: A |= B эквивалентно A = A | B
 +  * ''^='' - присваивание после операции исключающего ИЛИ. Присваивает левому операнду результат операции исключающего ИЛИ его битового представления с битовым представлением правого операнда: A ^= B эквивалентно A = A ^ B
 +++++
 +
 +===== Операторы сдвига =====
 +
 +Каждое целое число в памяти представлено в виде определенного количества разрядов. И операции сдвига позволяют сдвинуть битовое представление числа на несколько разрядов вправо или влево. Операции сдвига применяются __только к целочисленным__ операндам.
 +
 +  * ''<<'' - Сдвигает битовое представление числа, представленного первым операндом, влево на определенное количество разрядов, которое задается вторым операндом.
 +  * ''>>'' - Сдвигает битовое представление числа вправо на определенное количество разрядов.
 +
 +<code c>
 +int a = 2 << 2;  // 0b10 на два разрядов влево = 0b1000 = 8
 +int b = 16 >> 3; // 0b10000 на три разряда вправо = 0b10 = 2
 +</code>
 +
 +===== Поразрядные операции =====
 +
 +Поразрядные операции также проводятся только над разрядами __целочисленных__ операндов.
 +
 +  * ''&'' - поразрядная **конъюнкция** (операция И или поразрядное умножение). Возвращает 1, если оба из соответствующих разрядов обоих чисел равны 1
 +  * ''|'' - поразрядная **дизъюнкция** (операция ИЛИ или поразрядное сложение). Возвращает 1, если хотя бы один из соответствующих разрядов обоих чисел равен 1
 +  * ''^'' - поразрядное исключающее ИЛИ. Возвращает 1, если только один из соответствующих разрядов обоих чисел равен 1
 +  * ''~'' - поразрядное отрицание. Инвертирует все разряды операнда. Если разряд равен 1, то он становится равен 0, а если он равен 0, то он получает значение 1.
 +
 +<code c>
 +int a = 5 | 2; // 0b101 | 0b010 = 0b111 = 7
 +int b = 6 & 2; // 0b110 & 0b010 = 0b10 = 2
 +int c = 5 ^ 2; // 0b101 ^ 0b010 = 0b111 = 7
 + 
 +int f = 12; // 0b00001100
 +int d = ~f; // 0b11110011 или -13
 +</code>
  
 ===== Преобразования типов ===== ===== Преобразования типов =====
Строка 94: Строка 143:
 </code> </code>
  
 +===== Приоритет и очередность =====
 +^ Операторы ^ Выполняются ^
 +|%% () [] -> . %%| слева направо |
 +|%% ! ~ ++ -- + - * & (тип) sizeof %%| справа налево |
 +|%% * / % %%| слева направо |
 +|%% + - %%| слева направо |
 +|%% << >> %%| слева направо |
 +|%% < <= > >= %%| слева направо |
 +|%% == != %%| слева направо |
 +|%% & %%| слева направо |
 +|%% ^ %%| слева направо |
 +|%% | %%| слева направо |
 +|%% && %%| слева направо |
 +|%% || %%| слева направо |
 +|%% ?: %%| справа налево |
 +|%% = += -= *= /= %= &= ^= |= <<= >>= %%| справа налево |
 +|%% , %%| слева направо |
 +
 +<note>
 +Примечание. Унарные операторы +, -, * и & имеют более высокий приоритет, чем те же бинарные
 +операторы.
 +</note>