C Урок 5. Арифметические операторы, операторы инкремента и декремента



Движемся дальше по изучению языка C.

И теперь у нас наконец-то наступил момент, когда мы «заставим» наш процессор как-то обрабатывать наши данные. Думаю, что это важная ступень в освоении программирования.

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

Арифметические операторы бывают следующими:

 

+ сложение,

вычитание,

* умножение,

/ деление,

% деление по модулю.

 

Данные операторы все являются бинарными, так как они производят операции между двумя операндами.

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

А вот деление по модулю — это такая операция, которая осуществляет деление значения первого операнда на значение второго, а в результат операции записывает не частное, а остаток от деления. В дальнейшем мы, думаю, увидим, насколько полезна такая операция. Также следует учесть, что данная операция не применяется к данным с плавающей точкой или вещественного типа.

Также к арифметическим операциям я бы отнёс знак '=' (равно), который является знаком присвоения который присваивает значение выражения, находящегося справа, переменной, находящейся слева.

Также существуют ещё две унарные математические операции

 

++ инкрементирование,

декрементирование.

 

Инкрементирование — это математическая операция, которая увеличивает значение переменной, находящейся обычно слева от оператора инкрементирования, на единицу.

Декрементирование — это математическая операция, которая уменьшает значение переменной, находящейся обычно слева от оператора инкрементирования, на единицу.

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

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

Думаю, что разговаривать особо много об арифметических операторах нет никакого смысла, лучше всё-таки оценить их действие на ход программы по мере написания исходного кода.

Поэтому, давайте приступим к нашему проекту.

Как обычно, проект мы сделаем из проекта прошлого занятия MYPROG04 и назовём его MYPROG05. Как это делается, мы уже прекрасно знаем.

Откроем файл main.c в редактора и удалим из функции main() код всего тела кроме возврата нуля. Останется вот это

 

int main()

{

return 0; //Return an integer from a function

}

 

Объявим сразу несколько переменных всевозможных типов, некоторые из них сразу проинициализируем на этапе объявления

 

 

Неинициализированные переменные — это переменные, в которых будет храниться результат операций. Так как мы ещё не производили никаких вычислений, то у нас это будут по факту просто зарезервированные места в памяти.

Произведём первую операцию, например, вычитания, между значениями двух переменных типа char знакового типа, а результат запишем в переменную c_sub

 

 

 

Теперь давайте выведем в консоль значения переменных, а затем результат операции с ними

 

 

Соберём наш код и посмотрим результат выполнения нашей программы

 

 

Отлично! Мы получили первый наш результат, то есть мы осуществили обработку данных. Теперь наш процессор не просто занимается переброской данных из регистра в память и обратно. Он эти данные обработал и получил результат, который мы затем смогли посмотреть.

Теперь попробуем значение одной из переменных увеличить на единицу. Для этого нам не надо писать c2 = c2 +1; а применим мы для этого специальный оператор инкрементирования. А затем мы снова осуществим ту же операцию над данными и выведем результат в консоль

 

 

Я написал в комментарии, чему данная операция эквивалентна.

Теперь применим операцию декрементирования и также затем вычислим выражение и результат выведем в консоль, только оператор расположим до переменной

 

 

Соберём код и посмотрим результат его работы

 

 

Всё работает!

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

 

 

Соберём код и посмотрим результат выполнения операции сложения

 

 

Всё работает.

 

 

Далее поработаем с данными типа short, у которых диапазон значений немного больше. На них мы испытаем операцию умножения

 

 

Соберём код и посмотрим результат операции

 

Всё правильно.

А операцию деления мы испытаем на беззнаковых величинах типа unsigned short

 

 

Посмотрим результаты наших операций

 

 

Мы получили, как частное без остатка, так и остаток отдельно. Прекрасно!

Идём дальше.

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

Начнём со знакового типа int

 

 

Мы видим, что у нас в выражении справа появились ещё 2 оператора — открывающая и закрывающая скобка. Данные операторы, ровно так же, как и в обычной математике, отделяют участок операции, который нужно выполнить раньше. То есть мы также сначала вычисляем выражение, находящееся в скобках, а уже затем приступаем к операциям за скобками. Скобки существуют потому, что так же, как и в математике, арифметические операторы тоже имеют различный приоритет и у операций умножения и деления он выше, чем у операций сложения и вычитания. Поэтому, если бы мы не заключили операцию сложения в скобки, то у нас бы сначала произошла операция умножения между значениями переменных mi2 и ni3, а уже потом бы результирующее значение этой операции прибавилось бы к значению переменной ni1. С приоритетами различных операций мы познакомимся в более поздних уроках, так как операторов нам проходить ещё много и они бывают не только арифметические.

Соберём и выполним наш код

 

 

Всё правильно сработало, результат это подтверждает.

Теперь подобную операцию между тремя операндами попробуем проделать с беззнаковыми данными типа unsigned int, но только уже без скобок

 

 

Соберём код и посмотрим, что теперь у нас получится

 

 

По результату всей нашей операции мы видим, что сначала выполнилось деление, а уже затем вычитание, иначе бы у нас получилось 1500000000, а не 2500000000.

Поиграем теперь с типами long

 

 

Проверим результат

 

 

Всё правильно.

Теперь unsigned long

 

 

Смотрим результат операции

 

 

Также всё отлично работает.

Теперь попробуем поиграть с 8-байтными целыми значениями, сначала со знаковыми

 

 

Смотрим результат выполнения операции

 

 

Результат также правильный. Сумма двух одинаковых по модулю, но разных по знаку, чисел даёт ноль.

Теперь unsigned long long

 

 

Соберём код и посмотрим результат

 

 

Всё отлично! Результат правильный.

А теперь давайте попробуем поработать с плавающей точкой.

Сначала float

 

 

Посмотрим результат выполнения нашей операции

 

 

Результат верный.

Теперь попробуем операцию над длинными величинами с плавающей точкой типа double

 

 

Соберём код и посмотрим результат нашей операции

 

 

Отлично! Результат правильный.

И, на этом, думаю, мы закончим данное занятие, которое нас научило пользоваться арифметическими операторами и в котором, как всегда, по нашей славной традиции, мы наши знания подкрепили на практике.

Всем спасибо за внимание!

 

 

Предыдущий урок Программирование на C Следующий урок

 

Исходный код

 

 

Смотреть ВИДЕОУРОК (нажмите на картинку)

 

C Арифметические операторы, операторы инкремента и декремента

2 комментария на “C Урок 5. Арифметические операторы, операторы инкремента и декремента
  1. SergV:

    Здравствуйте! расскажите пожалуйста откуда берете модификаторы для разных типов данных, многих нет в уроке #2.

  2. Вячеслав:

    Некоторые модификаторы в вызове функции printf() позволяют отображать целые числа типа short и long. Такие модификаторы можно использовать для следующих спецификаторов типа: d, i, o, u и x. Модификатор l (эль) в вызове функции printf() указывает, что за ним следуют данные типа long. Например, %ld означает, что надо выводить данные типа long int. После модификатора h функция printf() выведет целое значение в виде short. Например, %hu означает, что выводимые данные имеют тип short unsigned int.

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

*