Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лаб2.Выражение и инструкция.docx
Скачиваний:
7
Добавлен:
08.05.2019
Размер:
47.28 Кб
Скачать

Макросы

Две следующие строки не эквивалентны:

const int I = 17;

#define I 17;

В первой строке определяется переменная, занимающая некоторую область памяти, а во второй - макрос. Управляющая строка вида

#define идентификатор последовательность-лексем

заставляет препроцессор заменить идентификатор последовательностью лексем (в тексте программы идентификатор I будет заменен числом 17).

Операции, выражения и операторы Арифметические операции

Бинарными (т. е. с двумя операндами) арифметическими операциями являются +, -, *, /, а также операция деления по модулю %. Деление целых сопровождается отбрасыванием дробной части, какой бы она ни была. Выражение x % y дает остаток от деления x на y и, следовательно, нуль, если x делится на y нацело. Операция % к операндам типов float и double не применяется. В какую сторону (в сторону увеличения или уменьшения числа) будет усечена дробная часть при выполнении / и каким будет знак результата операции % с отрицательными операндами, зависит от машины. Бинарные операции + и - имеют одинаковый приоритет, который ниже приоритета операторов *, / и %, который в свою очередь ниже приоритета унарных операторов + и -. Арифметические операции одного приоритетного уровня выполняются слева направо.

Если операнды операции принадлежат к разным типам, то они приводятся к некоторому общему типу. Приведение выполняется в соответствии с небольшим числом правил. Обычно автоматически производятся лишь те преобразования, которые без какой-либо потери информации превращают операнды с меньшим диапазоном значений в операнды с большим диапазоном, как, например, преобразование целого в число с плавающей точкой в выражении вроде f + i. Выражения, в которых могла бы теряться информация (скажем, при присваивании длинных целых переменным более коротких типов или при присваивании значений с плавающей точкой целым переменным), могут повлечь за собой предупреждение, но они допустимы. Значения типа char - это просто малые целые, и их можно свободно использовать в арифметических выражениях, что значительно облегчает всевозможные манипуляции с символами.

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

Приоритет арифметических операций естественный. Операции сравнения = =, != имеют приоритет более низкий, чем операции отношения. Операции отношения <, >, <=, >= имеют одинаковый приоритет, более низкий, чем приоритет арифметических операций. Из объектов, имеющих одинаковые или разные типы, составляют выражения, указывая операции, которые надо выполнить над объектами. Например, x – y = = c. По определению численным результатом вычисления выражения отношения (сравнения) является 1, если оно истинно, и 0, если ложно. Для явного указания порядка вычислений используют круглые скобки. Например, (a + b) / 2 / d.

Преобразования типов

Если операнды операции принадлежат к разным типам, то они приводятся к некоторому общему типу. Автоматически производятся только те преобразования, которые позволяют без потери информации превратить операнды с меньшим диапазоном значений, в операнды с большим. В большинстве случаев программист использует явное преобразование типа при помощи операции приведения типа: (имя_типа) выражение. Например, в выражении sqrt((double) n) перед вычислением квадратного корня целое n будет преобразовано к типу double. Сама переменная n не изменится.