Выражение – это представление в тексте программы значения.
Каждое выражение состоит из одного или нескольких операндов, символов операций и ограничителей, в качестве которых чаще всего выступают круглые скобки ().
Назначение любого выражения – формирование некоторого значения. В зависимости от типа формируемых значений определяются типы выражений.
Если значениями выражений являются целые или вещественные числа, то говорят об арифметических выражениях.
Операндами для арифметических выражений служат константы и переменные арифметических типов, а также выражения, заключенные в круглые скобки.
Выражения отношения и логические выражения традиционно должны давать одно значение: истина или ложь. В СИ истина – всегда ненулевое значение, 0 – ложь.
Отношение определяется как пара арифметических выражений, соединенных (разделенных) знаком операции отношения.
Операндами логических выражений являются выражения отношения.
Для формирования и последующего вычисления выражений используются операции. Для изображения одной операции в большинстве случаев используется несколько символов. В таблице приведены все знаки операций, определенные стандартом языка. Операции в таблице разбиты на группы в соответствие с их рангами.
Ранг | Операции | Ассоциативность |
(); []; ; . | à | |
!; ~; +; –; ++; ––; &; *; (тип); sizeof | ß | |
*; /; % (мультипликативные бинарные) | à | |
+; – (аддитивные бинарные) | à | |
<<; >> (поразрядного сдвига) | à | |
<; <=; >=; > (отношения) | à | |
==; != (отношения) | à | |
& (поразрядная конъюнкция “И”) | à | |
^ (поразрядное исключающее “ИЛИ”) | à | |
| (поразрядная дизъюнкция “ИЛИ”) | à | |
&& (конъюнкция “И”) | à | |
|| (дизъюнкция “ИЛИ”) | à | |
?: (условная операция) | ß | |
=; *=; /=; %=; +=; –=; &=; ^=; |=; <<=; >>= | ß | |
, (операция запятая) | à |
За исключением операций “[]”, “()” и “?:” все знаки операций распознаются компилятором как отдельные лексемы. В зависимости от контекста одна и та же лексема может обозначать разные операции, т.е. один и тот же знак операции может употребляться в различных выражениях и по разному интерпретироваться в зависимости от контекста.
Например, бинарная операция & – это поразрядная конъюнкция, а унарная & – это операция получения адреса.
Порядок выполнения выражения однозначно определяется рангами и ассоциативностью входящих в него операций. Изменить данный порядок можно только используя ( ).
Операции ранга 1 имеют наивысший приоритет.
Операции одного ранга имеют одинаковый приоритет, и если их в выражении несколько, то они выполняются в соответствие с правилом ассоциативности либо слева направо (à), либо справа налево (ß). Если один и тот же знак операции приведен в таблице дважды (например знак *), то первое появление (с меньшим по номеру, т.е. старшим по приоритету, рангом) соответствует унарной операции, а второе – бинарной.
4.1 Унарные (одноместные) операции
Для изображения одноместных префиксных и постфиксных операций используются следующие символы:
& – операция получения адреса операнда. Нельзя &(x+1).
* – операция обращения по адресу, т.е. раскрытия ссылки, иначе операция разыменования (доступа по адресу к значению того объекта, на который указывает операнд). Оператором должен быть указатель.
– – унарный минус, изменяет знак арифметического операнда.
+ – унарный плюс, введен для симметрии с унарным минусом.
~ – поразрядное инвертирование внутреннего двоичного кода целочисленного аргумента – побитовое отрицание.
Пример:
Unsigned char a:
A=201: (=c9 (16) = 11001001(2))
~A=54: (= 36 (16) = 00110110(2))
! – логическое отрицание (НЕ) значения операнда. Применяется к стандартным операндам. Целочисленный результат 0 (если операнд не нулевой, т.е. истинный) или 1 (если операнд нулевой, т.е. ложный). Напомним, что в качестве логических значений в языке используются целые числа: 0 – ложь и не нуль, т.е. (!0) – истина. Отрицание любого ненулевого числа будет 0, а отрицанием 0 будет 1. Таким образом: !1 равно 0; !2 равно 0; !(–5) равно 0; !0 равно 1;
++ – увеличение на единицу (инкремент или автоувеличение); имеет две формы:
++<имя> префиксная операция – увеличение значения операнда на 1 до его использования. Ассоциативность справа в соответствие со стандартом.
<имя>++ постфиксная операция – увеличение значения операнда на 1 после его использования. Ассоциативность слева в соответствие со стандартом.
- выражение ++m увеличивает на 1 значение m, и это полученное значение используется как значение выражения ++m (префиксная форма).
- выражение – – k уменьшает на 1 значение k, и это полученное значение используется как значение выражения – –k (префиксная форма).
- выражение i++ (постфиксная форма) уменьшает на 1 значение i, однако значением выражения i++ будет предыдущее значение i (до его увеличения).
- выражение j – – (постфиксная форма) уменьшает на 1 значение j, однако значением выражения j – – будет предыдущее значение j (до его уменьшения.
Дата добавления: 2015-06-10; просмотров: 1271;