Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ЭЛЕМЕНТЫ ЯЗЫКА C.doc
Скачиваний:
12
Добавлен:
05.11.2018
Размер:
476.16 Кб
Скачать
      1. Приоритет арифметических операций

Для правильной записи выражений необходимо знать приоритет (старшинство) операций, то есть последовательность их выполнения. Сначала выполняются

• операции в скобках, затем…

• вызовы функций, затем…

• умножение, деление и остаток от деления, слева направо, затем…

• сложение и вычитание, слева направо.

Например:

2 1 5 4 3 8 6 7

x = ( a + 5 * b ) * fabs ( c + d ) — ( 3 * b — c );

Для изменения порядка выполнения операций используются круглые скобки. Выражение

в компьютерном виде запишется в виде

y = (4*x + 5) / ((2*x — 15*z)*(3*z — 3)) — 5 * x /

(x + z + 3);

Рекомендуется при записи выражений не экономить скобки!

      1. Преобразования типов при вычислении выражений

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

Рассмотрим общие арифметические преобразования.

1. Операнды типа float преобразуются к типу double.

2. Если один операнд long double, то второй преобразуется к этому же типу.

3. Если один операнд double, то второй также преобразуется к типу double.

4. Любые операнды типа char и short преобразуются к типу int.

5. Любые операнды unsigned char или unsigned short преобразуются к типу unsigned int.

6. Если один операнд типа unsigned long, то второй преобразуется к типу unsigned long.

7. Если один операнд типа long, то второй преобразуется к типу long.

8. Если один операнд типа unsigned int, то второй операнд преобразуется к этому же типу.

Таким образом, можно отметить, что при вычислении выражений операнды преобразуются к типу того операнда, который имеет наибольший размер.

Пример:

double ft,sd;

unsigned char ch;

unsigned long in;

int i;

....

sd=ft*(i+ch/in);

При выполнении оператора присваивания правила преобразования будут использоваться следующим образом. Операнд ch преобразуется к unsigned int (правило 5). Затем он преобразуется к типу unsigned long (правило 6). По этому же правилу i преобразуется к unsigned long и результат операции, заключенной в круглые скобки будет иметь тип unsigned long. Затем он преобразуется к типу double (правило 3) и результат всего выражения будет иметь тип double.

Приведение типов это изменение (преобразование) типа объекта. Для выполнения преобразования необходимо перед объектом записать в скобках нужный тип:

( имя-типа ) операнд

Приведение типов используются для преобразования объектов одного скалярного типа в другой скалярный тип.

Пример:

int i;

bouble x;

b = (double)i+2.0;

В этом примере целая переменная i с помощью операции приведения типов приводится к плавающему типу, а затем уже участвует в вычислении выражения.

Рекомендуется все приведения типов в выражениях делать явно!