Операции и операторы

 

Функциональные возможности любого языка программирования состоят из набора разрешенных операций, из которых можно собрать работающие операторы, и библиотечных функций, включенных в состав этого языка.

Под операцией в языке С понимают какое-либо действие над данными.

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

Знак операции – это символ или служебное слово, которые приводят к выполнению того или иного действия.

Примером знака операции могут служить +, -, *, =, sizeof() и т.д.

Операнд – это данные, участвующие в операции.

Операция не является аналогом оператора. Оператор – это законченная команда компьютера на языке программирования для получения однозначного результата. Операции являются частью оператора, а не наоборот.

Количество операндов важно. В языке С некоторые из знаков операций неоднозначны. В этом случае количество операндов влияет на то, какая из возможных операций будет выполнена.

Некоторые операции чувствительны к типу операндов. В случае неправильно применения обычно появляется сообщение о принудительном преобразовании типа операнда. Если решение о приведение к типу операнда не может быть принято, то появляется ошибка компиляции. Следует помнить, что у большинства операций тип результата операции тот же, что и тип ее операндов.

Если в бинарной операции участвуют операнды различных типов, то перед выполнением операции "низший" тип преобразуется к "высшему" и получается результат "высшего" типа. Более точно, к каждой арифметической операции применяется следующая последовательность правил преобразования.

a) типы char и short преобразуются в int, а float в double;

b) если один из операндов имеет тип double, то другой преобразуется в double, и результат имеет тип double;

c) если один из операндов имеет тип long, то другой преобразуется в long, и результат имеет тип long;

d) все переменные типа float в выражениях преобразуются в double; в языке C вся плавающая арифметика выполняется с двойной точностью.

Длинные целые преобразуются в более короткие целые и в переменные типа char посредством отбрасывания лишних битов высокого порядка.

Символьные переменные преобразуются в целые либо со знаковым расширением, либо без него, как описано выше. Обратное преобразование int в char ведет себя хорошо – лишние биты высокого порядка просто отбрасываются. Таким образом:

int i;

char c;

i = c;

c = i;

значение с не изменяется. Это верно независимо от того, вовлекается ли знаковое расширение или нет.

Если х типа float, а i типа int, то, как х = i, так и i = х; приводят к преобразованиям; при этом float преобразуется в int отбрасыванием дробной части. Тип double преобразуется во float округлением.

Операции можно группировать по разным признакам. Если рассматривать критерием группировки место применения, то операции могут быть:

- математические – используются для математических вычислений;

- логические – используются для построения сложных условий;

- отношений – используются для сравнения данных (те же условия);

- побитовые – выполняющие преобразования данных по битам;

- доступа – позволяющие получить данные из сложных типов данных

- некоторые другие – сюда можно отнести операции приведения к типу, выделение и очистка памяти, определения размера данных и т.д.

Если использовать критерием группировки количество операндов, то операции будут:

- унарные – работают с одним операндом;

- бинарные – имеют два операнда;

- тернарные – используют три оператора.

Правильное (выполняемое) объединение операндов и операций называют выражением.

В выражении могут использоваться парные круглые скобки ().