Сводка приоритетов операций
В табл. 2.8 приведены приоритеты всех операций, определенных в С. Необходимо помнить, что все операторы, кроме унарных и "?", связывают (присоединяют, ассоциируют) свои операнды слева направо. Унарные операторы (*, &, -) и "?" связывают (присоединяют, ассоциируют) свои операнды справа налево.
Наивысший | ( ) [ ] -> . |
Наинизший | ! ~ ++ -- - (type) * & sizeof * / % + - << >> < <= > >= == != & ^ | && || ?: = + = - = * = / = и т.д. |
Таблица. Приоритеты операций в языке C
В данном случае под оператором имеется в виду, конечно, знак операции.
Выражения
Выражения состоят из операторов, констант, функций и переменных. В языке С выражением является любая правильная последовательность этих элементов. Большинство выражений в языке С по форме очень похожи на алгебраические, часто их и пишут, руководствуясь правилами алгебры. Однако здесь необходимо быть внимательным и учитывать специфику выражений в языке
Порядок вычислений
Порядок вычисления подвыражений в выражениях языка С не определен. Компилятор может самостоятельно перестроить выражение с целью создания оптимального объектного кода. Это значит, что программист не может полагаться на определенную последовательность вычисления подвыражений
Для повышения удобочитаемости программы при записи выражений можно использовать пробелы и символы табуляции. Лишние скобки, если они не изменяют приоритет операций, не приводят к ошибке и не замедляют вычисление выражения.
Явное преоразование типов: операция приведения типов
Программист может "принудительно" преобразовать значение выражения к нужному ему типу, используя операцию приведения типов. Общая форма оператора явного приведения типа:
(тип) выражениеЗдесь тип — это любой поддерживаемый тип данных.
Например, следующая запись преобразует значение выражения х/2 к типу float:
(float) х/2Явное преобразование типа — это операция. Оператор приведения типа является унарным и имеет тот же приоритет, что и остальные унарные операторы.
Иногда приведение типов может быть весьма полезным. Допустим, целую переменную нужно использовать как параметр цикла, притом в вычислении участвует и дробная часть числа. В следующем примере показано, как с помощью приведения можно сохранить точность:
#include <stdio.h> int main(void) /* печать i и i/2 с дробной частью */{ int i; for(i=1; i<=100; ++i) printf("%d / 2 is: %f\n", i, (float) i /2); return 0;}Без операции приведения (float) выполнялось бы целочисленное деление. Дробная часть результата выводится благодаря приведению типа переменной
Дата добавления: 2015-04-25; просмотров: 665;