Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Lab1-10.doc
Скачиваний:
37
Добавлен:
12.05.2015
Размер:
425.98 Кб
Скачать

3.11. Арифметические операторы и операторы присваивания

Арифметические операторы используются для выполнения арифметических операций над константами и переменными. Комбинация переменных, числовых констант и вызовов функций, объединенных арифметическими операторами, называется арифметическим выражением.

Результат вычисления арифметического выражения может быть присвоен переменной с помощью оператора присваивания – символа "=".

В языке Cопределены следующиеарифметические операторы:

Оператор

Действие

+

Присваивание переменной положительного значения.

-

Присваивание переменной отрицательного значения.

+

Сложение.

-

Вычитание.

*

Умножение.

/

Деление.

%

Определение остатка от деления целых чисел.

++

Увеличение значения переменной на единицу.

--

Уменьшение значения переменной на единицу.

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

Для выполнения арифметических операций в Cзадана следующая приоритетность (в порядке убывания приоритета):

  • присвоение знака числу и операции увеличения/уменьшения значения на 1;

  • умножение, деление и определение остатка;

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

В языке C оператор присваиванияможет бытьпростым(символ "=") илисоставным (знак операции и символ "="). В последнем случае запись:

переменнаязнак-операции=выражение

эквивалентна следующей записи

переменная=переменнаязнак-операции(выражение)

где знак операции – один из следующих арифметических операторов: "*", "/", "%", "+" и "-".

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

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

double y;

float x;

y = x + 5;

суммируются переменная x, имеющая типfloatи константа целого типа-5, а результат суммирования присваивается переменнойyтипаdouble.

В таких случаях в Cперед выполнением операций происходит преобразование операндов из одного типа в другой.

Для арифметических операций при этом действуют следующие правила:

  1. Типы charиshortпреобразуются вint.

  2. Тип floatпреобразуется вdouble.

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

  4. Если один из операндов имеет тип long, то другой преобразуется вlong, и результат имеет типlong.

  5. Если один из операндов имеет тип unsigned, то другой преобразуется вunsignedи результат имеет типunsigned.

При присваивании значение правой части преобразуется к типу левой.Этот тип и является типом результата. При этом преобразование происходит по следующим правилам:

  1. Символьные переменные преобразуются в целые либо со знаковым расширением, либо без него, как указано выше. При обратном преобразовании intвcharстаршие биты просто отбрасываются.

  2. Типы floatиdoubleпреобразуются вintотбрасыванием дробной части и округлением (дляdouble). При обратном преобразовании сначала происходит преобразование в типlong, а затем преобразование к плавающему типу (возможно с потерей точности).

  3. Тип doubleпреобразуется воfloatс помощью округления. Обратное преобразование происходит без потери точности.

  4. Длинные целые преобразуются в более короткие целые и в переменные типа charпосредством отбрасывания старших битов. При обратном преобразовании данные дополняются нулями слева.

  5. При преобразовании типа unsignedв типsignedстарший бит рассматривается как знаковый, а при обратном преобразовании старший бит рассматривается как часть числа.

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

(имя-типа)выражение

где выражениепреобразуется к указанному типу по правилам преобразования, которые изложенным выше и присваивается некоторой фиктивной переменной указанного типа, которая затем используется вместо всего выражения. Приоритет выполнение этой операции ниже, чем присвоение знака числу, но выше, чем у арифметических операций. Например,(int) (3.8 + 5) преобразует сумму константы3.8 типа doubleи5типаintв выражение целого типа (скобки необходимы, поскольку приоритет операции преобразования типа выше, чем у операции сложения).

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]