Правила построения выражений

Выражения состоят из операндов, знаков операций и скобок.

Примеры выражений:

(а + 0.12)/6

х && у || !z

(t * sin(x)-1.05e4)/((2 * k + 2) * (2 * k + 3))

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

Если в одном выражении за­писано несколько операций одинакового приоритета, унарные операции, условная операция и операции присваивания выполняются справа налево, остальные — сле­ва направо.Например, a = b = с означает а = (b = с), а a + b + с означает (а + b) + с.

Порядок вычисления подвыражений внутри выражений не определен: например, нельзя считать, что в выражении (sin(x + 2) + cos(y + 1)) обращение к синусу бу­дет выполнено раньше, чем к косинусу, и что х + 2 будет вычислено раньше, чем y+1.

Результат вычисления выражения характеризуется значением и типом. Напри­мер, если а и b — переменные целого тина и описаны:

int а = 2, b = 5;

то выражение а + b имеет значение 7 и тип int, а выражение а = b имеет значение, равное помещенному в переменную а (в данному случае 5) и тип, совпадающий с типом этой переменной.

Таким образом, в C++ допустимы выражения вида а = b = с; сначала вычисляется выражение b = с, а затем его результат становится правым операндом для операции присваивания переменной а.

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

 

Тема 1.6

Преобразование типов: неявное преобразование и преобразование «в стиле С»

 

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

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

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

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

Рисунок 1.3 – Преобразования типов, гарантирующие сохранение значимости



php"; ?>