В этом примере переменная целого типа
1. В константных выражениях нельзя использовать операции присваивания и последовательного вычисления (,).
2. Операция «адрес» (&) может быть использована только при инициализации.
Выражения со знаками операций могут участвовать в выражениях как операнды. Выражения со знаками операций могут быть унарными (с одним операндом), бинарными (с двумя операндами) и тернарными (с тремя операндами).
Унарное выражение состоит из операнда и предшествующего ему знака унарной операции и имеет следующий формат:
Знак унарной операции Операнд
Бинарное выражение состоит из двух операндов, разделенных знаком бинарной операции:
Операнд1 Знак бинарной операции Операнд2
Тернарное выражение состоит из трех операндов, разделенных знаками тернарной операции ('?' и ':')> и имеет формат:
Операнд1 '?' Операнд2 ':' ОперандЗ.
В языке С-51 имеются следующие унарные операции, приведенные в табл. 9.8.
Унарные операции выполняются справа налево.
Операции инкремента и декремента увеличивают или уменьшают значение операнда на единицу и могут быть записаны как справа, так и слева от операнда. Если знак операции записан перед операндом (префиксная форма), то изменение операнда происходит до его использования в выражении. Если знак операции записан после операнда (постфиксная форма), то операнд вначале используется в выражении, а затем происходит его изменение.
В отличие от унарных, бинарные операции, список которых приведен в табл. 9.9, выполняются слева направо.
Левый операнд операции присваивания должен быть выражением, ссылающимся на область памяти (но не идентификатором, объявленным с ключевым словом const). Левый операнд не может также быть массивом.
При записи выражений следует помнить, что символы '*', '&', '-' '+' могут обозначать как унарную, так и бинарную операцию.
При выполнении операций производится автоматическое преобразование типов, чтобы привести операнды выражений к общему типу или чтобы расширить короткие величины до размера целых величин, используемых в машинных командах. Выполнение преобразования типов зависит от специфики операций и от типа операнда или операндов.
Рассмотрим общие арифметические преобразования.
1. Если один операнд имеет тип float, то второй также преобразуется к типу float.
2. Если один операнд имеет тип unsigned long, то и второй также преобразуется к типу unsigned long.
3. Если один операнд имеет тип long, то второй также преобразуется к типу long.
4. Если один операнд имеет тип unsigned int, то второй операнд преобразуется к этому же типу.
Таким образом, можно отметить, что при вычислении выражений операнды преобразуются к типу того операнда, который имеет наибольший размер. Приведем пример преобразования типов при вычислении математического выражения:
float ft,sd;
unsigned char ch;
unsigned long in;
int i;
....
sd=ft*(i+ch/in);
При выполнении оператора присваивания правила преобразования будут использоваться следующим образом. Операнд ch преобразуется к unsigned long. По этому же правилу i преобразуется к unsigned long и результат операции, заключенной в круглые скобки, будет иметь тип unsigned long. Затем он преобразуется к типу float, и результат всего выражения будет иметь тип float.
Пример:
Пример:
int t, z=0;
t=!z;
Переменная
Операция поразрядного отрицания (-) инвертирует каждый бит операнда.