КАТЕГОРИИ: Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748) |
Перечень операций языка СиДополнительные операции
В языке Си имеется около сорока операций. Те операции, которые мы рассмотрели, являются наиболее общеупотребительными. Рассмотрим еще три операции, наиболее используемые программистами.
Операция деления по модулю: % Эта операция используется в целочисленной арифметике. Ее результатом является остаток от деления целого числа, стоящего слева от знака операции, на число, расположенное справа от нее. Например, 63%5, читается как 63 по модулю 5, имеет значение 3, т.к. 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;
Операция отрицания: - Тип операнда - арифметический. Тип результата: unsigned, long, double, int.
Операция логического отрицания:! Тип операнда - арифметический или указатель. Тип результата - int. Если операнд равен 0, то результат равен 1 и наоборот. Пример: if(!good) printf("not good");
Операция дополнения до 1: ~ Тип операнда - интегральный. Тип результата: int, long, unsigned. Пример: opposite=~mask; Дополнение до единицы значения mask. Результат присваивается переменной opposite.
Операция увеличения: ++ Тип операнда - арифметический или указатель. Тип результата: int, unsigned, long, double, указатель. Значение операнда увеличивается, и становится новым значением операнда. Значение указателя увеличивается на величину указываемого объекта, значения других операндов увеличиваются на единицу.
Операция увеличения, постфиксная: ++ Тип операнда - арифметический или указатель. Тип результата: int, unsigned, long, double, указатель. Значение операнда увеличивается, но возвращается старое значение операнда. Значение указателя увеличивается на величину указываемого объекта, другие операнды увеличиваются на единицу. Использование: iv++ Увеличение iv на 1. Значением этого выражения является значение iv до увеличения. Пример: j=i++; Использование: pv++; Увеличение указателя pv на 1, так что он будет указывать на следующий объект того же типа. Значением этого выражения является значение pv до увеличения. Пример: *ptr++=0; Присвоить значение 0 переменной, на которую указывает ptr, затем увеличить значение указателя ptr так, чтобы он указывал на следующую переменную того же типа.
Операция уменьшения: -- Тип операнда - те же, что и для ++. Тип результата - те же, что и для ++. Использование: --iv Уменьшение iv на 1. Значением этого выражения является значение iv после уменьшения. Пример: i=--j;
Операция уменьшения (постфиксная): -- Тип операнда - те же, что и для ++ (постфиксная). Использование: iv-- Уменьшение iv на 1. Значением этого выражения является значение iv до уменьшения. Пример: j=i--;
Операция определения требуемой памяти в байтах: sizeof Тип операнда - значение любого типа или имени типа. Тип результата - unsigned. Используется как sizeof (выражение) или sizeof (имя типа). Пример: n=sizeof(arname)/sizeof(int); Число элементов в массиве целых чисел, определяемое как число байт в массиве, поделенное на число байт, занимаемых одним элементом массива.
Операции, уровень приоритета которых равен 3
Мультипликативные операции. Порядок выполнения мультипликативных операций - слева направо.
Операция умножения: * Тип операндов - арифметический. Тип результатов: int, unsigned, long, double. Использование: ae1*ae2 Произведение значений ae1*ae2. Пример: z=35*5;
Операция деления: / Тип операндов - арифметический. Тип результатов: int, unsigned, long, double. Использование: ae1/ae2 Частное от деления ae1 на ae2. Пример: i=j/7;
Операция получения остатка: % Тип операндов - интегральный. Тип результата int, unsigned, long. Знак остатка машинно-зависим. Использование: ae1%ae2 Остаток от деления по модулю. Пример: j=i%2; Если i четное число, то j равно нулю.
Операции, уровень приоритета которых равен 4
Уровень приоритета аддитивных операций равен 4. Выполняются эти операции слева направо.
Операция сложения: + Тип операндов: арифметический; один операнд указатель, другой - интегрального типа; оба операнда не могут быть указателями. Тип результата: int, unsigned, long, double, указатель. Перед сложением значение целого операнда умножается на величину элемента данных, тип которых соответствует типу указателя. Использование: ae1+ae2 Сумма значений ae1 и ae2. Пример 1: i=i+100; Первоначальное значение i увеличивает на 100. Пример 2: last=arname+arsize-1; Присваивает переменной last адрес последнего элемента массива arname.
Операция вычитания: - Тип операндов: 1. Арифметический; 2. Один операнд - указатель, другой - интегрального типа; 3. Операнды - указатели одного типа. В первом случае тип результата: int, unsigned, long, double. Во втором случае тип результата - указатель. До вычитания значение целого операнда умножается на величину элемента данных, тип которых соответствует типу указателя. В третьем случае тип результата - int. Результат - число объектов, отделенных двумя указателями.
Дата добавления: 2014-01-05; Просмотров: 423; Нарушение авторских прав?; Мы поможем в написании вашей работы! Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет |