Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ЛР3-С++-13 марта-2012.doc
Скачиваний:
14
Добавлен:
15.09.2019
Размер:
1.26 Mб
Скачать

1.2.4.6. Операция sizeof

Результатом операции sizeof является размер в байтах типа или объявленной переменной. Применение операции к массиву возвращает число байтов, необходимое для размещения всех элементов массива.

1.3. Порядок (старшинство) выполнения арифметических операций

Операции в языке С++ выполняются в соответствии с их приоритетом (старшинством).

Полный список всех операций (операторов) языка С++, упорядоченный по приоритетам будет рассмотрен в лабораторной работе № 6. Более подробно некоторые из этих операторов рассматриваются в последующих ЛР.

В данной лабораторной работе ограничимся только арифметическими операциями. Арифметические операции, а также их старшинство (ранг) приведены ранее в таблице 3.4. Таблица разделена на сегменты двойными линиями. Операторы в каждом сегменте имеют одинаковый приоритет, причем более высокий, чем у операторов в после­дующих сегментах. Например, операции умножение, деление, остаток от деления расположены в одном сегменте. Следовательно, они имеют оди­наковый приоритет, превосходящий приоритет арифметических операций сложения и вычитания.

В табл. 3.4 категории приоритетов названы рангами. Операции ранга 1 имеют наивысший приоритет. Операции одного ранга имеют одинаковый приоритет, и если их в выражениях несколько, то они выполняются в соответствии с правилом ассоциативности: либо слева направо (Л), либо справа налево (П). Если один и тот же знак операции приведен в таблице дважды, то первое появление (с меньшим по номеру, т.е. старшим по приоритету, рангом) соответствует унарной операции, а второе – бинарной.

Порядок определяет последовательность группировки операций (операторов) при одинако­вом уровне приоритета. Вопросы порядка весьма существенны и в некоторых других случаях. Например, правосторонний порядок (П) оператора присвоения позволяет соз­давать составные операторы присвоения.

ival - jval = kval = lval // правосторонний порядок

(ival = (jval = (kval = lval))) // эквивалентная версия со скобками

Это выражение сначала присваивает значение переменной lval переменной kval, полученный результат присваивается переменной jval и, наконец, перемен­ной ival.

Арифметические операторы, напротив, имеют левосторонний порядок (Л).

ival * jval / kval * lval // левосторонний порядок

(((ival * jval) / kval) * lval) // эквивалентная версия со скобками

В этом выражении, например, происходит умножение значений переменных ival и jval, затем деление результата на значение переменной kval и, наконец, умножение результата деления на lval.

Замечание: поскольку в лабораторных работах с 1-й по 5-ю используются исключительно арифметические операции, то при написании программ на С++ удобнее пользоваться на первых порах более простой и компактной табл. 3.4, в которой приведен приоритет (ранг) только арифметических операций. Начиная с лабораторной работы № 6 при написании программ на языке С++ будут использоваться помимо арифметических операций и другие операции языка С++, в этом случае необходимо обращаться к табл. 6.7. (лабораторная работа № 6).

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

Пример 3.6.

double n=2, SCALE = 1.2;

double arg = 25.0 + 60.0*n/SCALE;

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

Результат выражения зависит от группировки составляющих его операторов. Например, при вычислении выражения в примере 3.7 слева направо получится 20.

Пример 3.7.

6+3*4/2+2;

Для выражения примера 3.7 вполне возможны и другие результаты: 9, 14 и 36. Напомним, что в языке С++ результат вычисления выражения со­ставит 14.

Умножение и деление имеют более высокий приоритет, чем сложение. Их опе­ранды связаны с операторами жестче, чем операнды операторов сложения. Умноже­ние и деление имеют одинаковый приоритет. Операторы имеют также порядок выполнения, который определяет последовательность группировки операндов у операторов с одинаковым уровнем приоритета. Арифметические операторы имеют левосторонний порядок, т.е. они группируются слева направо. Теперь вполне оче­видно, что приведенное выше выражение можно переписать следующим образом.

int temp = 3*4 //12

int temp2 = temp /2 //6

int temp3 = temp2 + 6 //12

int result = temp3 + 2 // 14