Вівторок, 16.04.2024, 12:57
Гость

Мішатронік

Мобільна версія | Додати у вибране  | Мій профіль | Вихід | RSS |
Меню сайту
Наше опитування
Чи працювали ви з мікроконтролером?
Всього відповідей: 5
Статистика

Онлайн всього: 1
Гостей: 1
Користувачів: 0


Дополнительные операции

В языке Си имеется около сорока операций. Те операции, которые мы рассмотрели, являются наиболее общеупотребительными. Рассмотрим еще три операции, наиболее используемые программистами.

 

Операция деления по модулю: %

Эта операция используется в целочисленной арифметике. Ее результатом является остаток от деления целого числа, стоящего слева от знака операции, на число, расположенное справа от нее. Например, 63%5, читается как 63 по модулю 5, имеет значение 3, т.к. 63=12*5+3.

 

В результате выполнения оператора

 
minutes=time%60;
 

переменной minutes будет присвоено значение остатка от деления time на 60.

 

Операция увеличения: ++

Операция увеличения осуществляет следующее простое действие: она увеличивает значение своего операнда на единицу. Существуют две возможности использования данной операции: первая, когда символы ++ находятся слева от переменной (операнда ), - "префиксная" форма, и вторая, когда символы ++ стоят справа от переменной, - "постфиксная" форма. Эти две формы указанной операции различаются между собой только тем, в какой момент осуществляется увеличение операнда. Префиксная форма изменяет значение операнда перед тем, как операнд используется. Постфиксная форма изменяет значение после того как операнд использовался.

 

В примере,

 
j=i++;
 

переменной j сначала присваивается значение i, затем значение переменной i увеличивается на 1.

 

Операция уменьшения: --

Каждой операции увеличения соответствует некоторая операция уменьшения, при этом вместо символов ++ мы используем --. Когда символы -- находятся слева от операнда - "префиксная" форма операции уменьшения. Если символы -- стоят справа от операнда - это "постфиксная" форма операции уменьшения.

 

В соответствии с принятым в языке Си порядком вычислений операции увеличения и уменьшения имеют очень высокий уровень старшинства. Только круглые скобки обладают более высоким приоритетом. Поэтому выражение a/b++ означает (a)/(b++), а не (a/b)++.

 
!

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

 

Перечень операций языка Си

Рассмотрим множество операций языка Си. Описанные операции входят в это множество. Язык Си отличается их большим разнообразием. В этом разделе будет обсуждаться их семантика. Каждая операция характеризуется уровнем приоритета и порядком, в котором эти операции выполняются - слева направо или справа налево. Если все операции выражения имеют один и тот же уровень приоритета, то значение выражения вычисляется слева направо в соответствии с порядком выполнения операций. Все операции с одним и тем же уровнем приоритета имеют один и тот же порядок. Однако, если в выражении имеются операции с различными уровнями приоритета, то сначала выполняются операции с наивысшим уровнем приоритета, затем - следующего за ним приоритета и так далее в порядке убывания приоритета. Операции одного уровня приоритета выполняются в последовательности, указанной их порядком.

 

Операции, уровень приоритета которых равен 1

Операции вызова функции, индексирования и выбора. В качестве операций языка Си рассматриваются также скобки в вызове функции, квадратные скобки для индексирования массивов, точка и стрелка вправо для выбора компонентов структуры или объединения. Уровень этих операторов равен 1, все операции выполняются слева направо.

 
Операция вызова функции: ( )

Пример 1:

 
fe(e1, e2,...,en);
 

Вызов функции fe с аргументами e1, e2, ..., en. Значением этого выражения является значение, которое возвращает функция.

 

Пример 2:

 
x = sqrt (y);
 
Операция индексирования массива: []

Синтаксис:

 
array [2]
 

Значением выражения является третий элемент массива.

 

Присвоение значения 26 одиннадцатому элементу массива записывается таким образом:

 
array[10]=26;
 

Первый элемент массива описывается выражением array[0] (более подробно о массивах описано в лекции 12).

 
Операция выбора компонентов структуры или объединения: .

Синтаксис:

 
struct.element
 

Значением этого выражения является элемент element структуры struct или объединения (см. лекцию 14). Оператор:

 
struct.element=1963;
 

присваивает значение 1963 этому элементу.

 
Операция выбора компонентов структуры с указателем: ->

Синтаксис:

 
my_birthday->day,
 

my_birthday - указатель на структуру. Оператор:

 
my_birthday->day=26;
 

присваивает значение 26 структурной переменной day, на которую указывает my_birthday.

 

Операции, уровень приоритета которых равен 2

Унарные операции. Для унарных операций требуется только один операнд ; эти операции либо префиксные, либо постфиксные. Операция sizeof имеет два варианта: префиксная операция и унарная операция.

 
Операция косвенной ссылки: *

Это указатель на любой тип T, кроме void. Тип результата T.

 

Использование:

 
*pe
 

Значением выражения является переменная, адресуемая указателем pe.

 

Пример 1:

 
*ptr=c;
 

Пример 2:

 
*fpe;
 

Значением выражения является функция, адресуемая указателем fpe.

 

Пример 3:

 
fpe=*funcname;
(*fpe)(arg1, arg2);
 
Операция получения адреса: &

У этой операции тип операнда есть переменная любого типа, кроме void. Тип результата - указатель на Т.

 

Использование:

 
&v
 

Значением выражения является адрес переменной v.

 

Пример:

 
myptr=&n;
 
Операция отрицания: -

Тип операнда - арифметический. Тип результата: unsignedlongdoubleint.

 

 

Форма входа
Пошук
Друзі сайту
Календар
«  Квітень 2024  »
ПнВтСрЧтПтСбНд
1234567
891011121314
15161718192021
22232425262728
2930

Єдина Країна! Единая Страна!