Обработка данных и вычисление значений осуществляется выражениями. Выражение состоит из операций. В таблице приведены все операции языка Си в порядке убывания приоритета.
ТАБЛИЦА 5. ОПЕРАЦИИ ЯЗЫКА Си.
операция | описание | пример | приоритет, ассоциативность | ||
Первичные операции | |||||
() | Вызов функции | fgetc (pcx) | 16, слева направо | ||
[ ] | Индекс массива | chr [128] | 16, слева направо | ||
. | Элемент структуры | coord.x | 16, слева направо | ||
® | Элемент структуры | coord®x | 16, слева направо | ||
Унарные операции | |||||
++ | Увеличение на 1 | i++ | 15, слева направо | ||
- - | Уменьшение на 1 | i- - | 15, слева направо | ||
Sizeof | Размер в байтах | sizeof (b1) | 14, справа налево | ||
(mun) | Преобразование типа | (float)(x) | 14, справа налево | ||
~ | Побитовое НЕ | ~a | 14, справа налево | ||
! | Логическое НЕ | !EOF | 14, справа налево | ||
– | Унитарный минус | –i | 14, справа налево | ||
& | Адрес | &x | 14, справа налево | ||
* | Содержимое адреса | *x | 14, справа налево | ||
Бинарные операции мультипликативные | |||||
* | Умножение | 16*16 | 13,слева направо | ||
/ | Деление | x/8 | 13,слева направо | ||
% | Остаток деления | x%8 | 13,слева направо | ||
Аддитивные | |||||
+ | Сложение | x+b | 12, слева направо | ||
– | Вычитание | x–b | 12, слева направо | ||
Побитовый сдвиг | |||||
<< | Сдвиг влево | 0x80<<i | 11,слева направо | ||
>> | Сдвиг вправо | 0x80>>i | 11,слева направо | ||
Операции отклонения | |||||
< | Меньше, чем | i<a | 10, слева направо | ||
> | Больше, чем | i>a | 10, слева направо | ||
Равенства | |||||
= = | Равно | x= =b | 9, слева направо | ||
!= | Не равно | x!=b | 9, слева направо | ||
Битовые | |||||
& | Побитовое И | 8, слева направо | |||
^ | Побитовое исключающее ИЛИ | a^b | 7, слева направо | ||
! | Побитовое или | x!b | 6, слева направо | ||
Логические | |||||
&& | Логическое И | x>1&&x<3 | 5, слева направо | ||
|| | Логическое ИЛИ | x<0||x= =0 | 4, слева направо | ||
Условный | |||||
? | При условии | a>b?1:0 | 3, справа налево | ||
Присваивания | |||||
= | Присваивание | a=4 | 2, справа налево | ||
*= | Присваивание произведения | x*=10 | 2, справа налево | ||
/= | Частного | x/=10 | 2, справа налево | ||
операция | описание | пример | приоритет, ассоциативность | ||
%= | Остатка деления | x%=10 | 2, справа налево | ||
+= | Суммы | x+=10 | 2, справа налево | ||
–= | Разности | x–=10 | 2, справа налево | ||
<<= | Левого сдвига | x<<=10 | 2, справа налево | ||
>>= | Правого сдвига | x>>=10 | 2, справа налево | ||
&= | Присвоение И | i&=j | 2, справа налево | ||
^= | Присвоение исключающего ИЛИ | i^=j | 2, справа налево | ||
!= | Присвоение ИЛИ | i!=j | 2, справа налево | ||
, | Запятая | x=2,x=y | 1, слева направо | ||
Дадим пояснение побитовым операциям. Если имеется следующее побитовое значение 10011110, то сдвиг влево на четыре бита дает результат 11100000, а сдвиг вправо на четыре бита приведет к значению 00001001.
Битовое И означает, что если имеется два значения 10011110 и 11111000, то побитовое умножение их приведет к результату: 10011100. Исключающее ИЛИ этих значений определяет: 01100010. В этом случае единицы ставятся там, где биты не совпадают, а нули – где совпадают.
Результатом побитового ИЛИ будет: 11111110. Единицы ставятся в тех местах, где хотя бы один из битов равен единице. В этом случае справедлива арифметика 1+1=1, 0+1=1.
Обратим внимание, что в случае операции i++ вначале используется старое значение i, а потом выполняется его приращение.
Унарный оператор! преобразует ненулевой операнд в 0, а нуль в 1.