- •Лабораторная работа 1-10
- •3.8. Алфавит языкаC, идентификаторы, ключевые слова, комментарии
- •3.9. Константы вC
- •3.10. Объявление простых переменных
- •3.11. Арифметические операторы и операторы присваивания
- •3.12. Преобразования типов
- •3.13. Стандартная библиотека языка c
- •3.14. Форматный вывод данных в c
- •4. Порядок выполнения работы
- •5. Содержание отчета
- •6. Вопросы для самоконтроля
3.11. Арифметические операторы и операторы присваивания
Арифметические операторы используются для выполнения арифметических операций над константами и переменными. Комбинация переменных, числовых констант и вызовов функций, объединенных арифметическими операторами, называется арифметическим выражением.
Результат вычисления арифметического выражения может быть присвоен переменной с помощью оператора присваивания – символа "=".
В языке Cопределены следующиеарифметические операторы:
Оператор |
Действие |
+ |
Присваивание переменной положительного значения. |
- |
Присваивание переменной отрицательного значения. |
+ |
Сложение. |
- |
Вычитание. |
* |
Умножение. |
/ |
Деление. |
% |
Определение остатка от деления целых чисел. |
++ |
Увеличение значения переменной на единицу. |
-- |
Уменьшение значения переменной на единицу. |
Операции в выражении выполняются слева направо с учетом общепринятого старшинства арифметических операций. Порядок выполнения операций можно изменить, как и в математике, с помощью скобок.
Для выполнения арифметических операций в Cзадана следующая приоритетность (в порядке убывания приоритета):
присвоение знака числу и операции увеличения/уменьшения значения на 1;
умножение, деление и определение остатка;
сложение и вычитание.
В языке C оператор присваиванияможет бытьпростым(символ "=") илисоставным (знак операции и символ "="). В последнем случае запись:
переменнаязнак-операции=выражение
эквивалентна следующей записи
переменная=переменнаязнак-операции(выражение)
где знак операции – один из следующих арифметических операторов: "*", "/", "%", "+" и "-".
3.12. Преобразования типов
При выполнении арифметических операций или операции присваивания переменные и константы, участвующие в этих операциях могут быть разных типов, например в следующей последовательности операторов:
double y;
float x;
y = x + 5;
суммируются переменная x, имеющая типfloatи константа целого типа-5, а результат суммирования присваивается переменнойyтипаdouble.
В таких случаях в Cперед выполнением операций происходит преобразование операндов из одного типа в другой.
Для арифметических операций при этом действуют следующие правила:
Типы charиshortпреобразуются вint.
Тип floatпреобразуется вdouble.
Если один из операндов имеет тип double, то другой преобразуется вdouble, и результат имеет типdouble.
Если один из операндов имеет тип long, то другой преобразуется вlong, и результат имеет типlong.
Если один из операндов имеет тип unsigned, то другой преобразуется вunsignedи результат имеет типunsigned.
При присваивании значение правой части преобразуется к типу левой.Этот тип и является типом результата. При этом преобразование происходит по следующим правилам:
Символьные переменные преобразуются в целые либо со знаковым расширением, либо без него, как указано выше. При обратном преобразовании intвcharстаршие биты просто отбрасываются.
Типы floatиdoubleпреобразуются вintотбрасыванием дробной части и округлением (дляdouble). При обратном преобразовании сначала происходит преобразование в типlong, а затем преобразование к плавающему типу (возможно с потерей точности).
Тип doubleпреобразуется воfloatс помощью округления. Обратное преобразование происходит без потери точности.
Длинные целые преобразуются в более короткие целые и в переменные типа charпосредством отбрасывания старших битов. При обратном преобразовании данные дополняются нулями слева.
При преобразовании типа unsignedв типsignedстарший бит рассматривается как знаковый, а при обратном преобразовании старший бит рассматривается как часть числа.
Помимо перечисленных выше преобразований, называемых неявными преобразованиями типа (поскольку они автоматически выполняются компилятором без вмешательства программиста), в Cможно задать явное преобразование типа с помощью следующей операции:
(имя-типа)выражение
где выражениепреобразуется к указанному типу по правилам преобразования, которые изложенным выше и присваивается некоторой фиктивной переменной указанного типа, которая затем используется вместо всего выражения. Приоритет выполнение этой операции ниже, чем присвоение знака числу, но выше, чем у арифметических операций. Например,(int) (3.8 + 5) преобразует сумму константы3.8 типа doubleи5типаintв выражение целого типа (скобки необходимы, поскольку приоритет операции преобразования типа выше, чем у операции сложения).