| Выражения Выражение состоит из одного или большего числа операндов и символов операций. Пример: а++ b = 10 х = (y*z)/w Замечание. Выражение, заканчивающееся точкой с запятой, является оператором |
Некоторые операции требуют операндов определенного вида. Вид операнда обозначается одной из следующих букв: е - любое выражение; v - любое выражение, ссылающееся на переменную, которой может быть присвоено значение. Такие выражения называются адресными. Префикс указывает тип выражения. Например, ie обозначает произвольное целое выражение. Далее описываются все возможные префиксы. i - целое число или символ; а - арифметическое выражение (целое число, символ или число с плавающей точкой); р - указатель; s - структура или объединение; sp - указатель на структуру или объединение; t - функция; tp — указатель на функцию.Обозначение япет указывает на имя элемента структуры или объединения. Замечание. Если в выражении должно быть несколько операндов, то они отличаются номерами, например ael + ае2 |
| +
Использование: ael + ае2 Сумма значений ael и ае2. Пример: “=J+2; Устанавливает i равным J плюс 2. + Использование: ре + ie Адрес переменной типа ре, больший на ie адреса, заданного указателем ре. Пример last = arname + arsize - 1, Присваивает переменной last адрес последнего элемента массива arname — Использование: ael - ае2 Разность значений ael и ае2 Пример: 1=J-3, - Использование: ре - ie Адрес переменной типа ре, меньший на ie адреса, заданного указателем ре. Пример first = last - Jisize + 1. — Использование: pel - ре 2 Число переменных типа ре в диапазоне от ре2 до pel. Пример arsize = last - first. - Использование: -ае Изменение знака ае. i Пример: Х= —X, * Использование: ael * ае2 Произведение значений ael и ае2 Пример: z= 3 *х. / Использование: ael / ае2. Частное от деления ael на ае2. Пример: l=J/5. % Использование: ael % ае2 Остаток от деления (деление по модулю) ael на ае2. Пример: minutes =s time % 60, Замечание при выполнении операций ++ и - — появляется побочный эффект — изменяется значение переменной, используемой в качестве операнда ++Использование: iv++ Увеличение iv на 1 Значением этого выражения является значение iv до увеличения. Пример: J=l++; ++ Использование: pv++ Увеличение указателя pv на 1, так что он будет указывать на следующий объект того же типа Значением этого выражения является значение pv до увеличения. Пример: *ptr++ =: 0; Присвоить значение 0 переменной, на которую указывает ptr, затем увеличить значение указателя ptr так, чтобы он указывал на следующую переменную того же типа. ++ Использование: ++iv Увеличение iv на 1 Значением этого выражения является значение iv после увеличения. Пример: 1=++J. ++ Использование: ++pv Увеличение pv на 1 Значением этого выражения является зна чение pv после увеличения. Пример: *++ptr = 0; —- Использование: iv— Уменьшение iv на 1 Значением этого выражения является значение iv до уменьшения. Пр имер J= 1—. — Использование: pv— Уменьшение указателя pv на 1 так, что он будет указывать на предыдущий объект того же типа Значением этого выражения является значение pv до уменьшения. Пример: arrpos= р--. — Использование: —iv Уменьшение iv на 1. Значением этого выражения является значение iv после уменьшения. Пример: i= --J. Использование: —pv Уменьшение pv на- 1 Значением этого выражения является значение pv после уменьшения. Пример: prepos= --р. |
| Замечание Значением выражения, в
которое входит операция присваивания, является
значение левого операнда после присваивания.= Использование: v = e Присваивание значения е
переменной v. Пример: х= у;
Замечание. Следующие операции
объединяют арифметические или побитовые
операции с операцией присваивания
+= Использование: av += ae Увеличение av на ae Пример: у+=2; Увеличение переменной у на 2. += Использование: pv += ie Увеличение pv на ie. Пример: р+= п, -= Использование: av -= ae Уменьшение av на ae. Пример: х-=3; -= Использование: pv -= ie Уменьшение pv на ie. Пример: ptr -= 2; *= Использование: av *= ae Умножение av на ae. Пример: timesx *= х; /= Использование: av /= ae Деление av на ae. Пример: х/=2; %= Использование: iv %= ie Значение iv по модулю ie. Пример: х%= 10; ”= Использование: iv ”= ie Сдвиг двоичного представления iv вправо на ie бит. Пример: х”=4; “== Использование: iv “= ie Сдвиг двоичного представления iv влево на ie бит. Пример: х “= 1; <Ь= Использование: iv &= ie Побитовая операция И двоичных представлений iv и ie. Пример: remitems &= mask, = Использование: iv "= ie Побитовая операция исключающее ИЛИ двоичных представлений iv и je. Пример: control "= seton; 1= Использование: iv 1= ie Побитовая операция ИЛИ двоичных представлений iv и ie. Пример: additems |= mask; |
| !
Использование: !ае или !ре Истина,
если ае или ре ложно. Пример: if (!good) prmtf ("not good"),II Использование:el i, e2 Логическая операция ИЛИ
значений е1 и e2. Вначале проверяется значение е1;
значение e2 проверяется только в том случае, если
значение el - Ложь. Значением выражения является
Истина, если истинно значение е1 или e2. Пример: if (х < А || х > В)
printf ("out of range"), && Использование: el && e2 Логическая операция И значений е1 и e2. Вначале проверяется значение е1; значение e2 проверяется только в том случае, если значение el — Истина. Значением выражения является Истина, если значения е1 и e2 - Истина. Пример: if (р! = NULL && *р > 7) п++;Если р - не нулевой указатель и значение переменной, на которую указывает р, больше, чем 7, то увеличить п на 1. Обратите внимание, что если значение указателя р равно NULL (0), то выражение *р не имеет смысла. |
| ~ Использование: ie Дополнение до единицы значения ie. Значение выражения содержит 1 во всех разрядах, в которых ie содержит 0, и 0 во всех разрядах, в которых ie содержит 1. Пример: opposite = mask,” Использование: iel ” ie2 Двоичное представление iel сдвигается вправо на ie2 разрядов. Сдвиг вправо может быть арифметическим (т. е. освобождающиеся слева разряды заполняются значением знакового разряда) или логическим в зависимости от реализации, однако гарантируется, что сдвиг вправо целых чисел без знака будет логическим и освобождающиеся слева разряды будут заполняться нулями. Пример: х= х” 3; “ Использование: iel “ ie2 Двоичное представление iel сдвигается влево на ie2 разрядов; освобождающиеся справа разряды заполняются нулями. Пример: fourx= x“ 2; & Использование: iel & ie2 Побитовая операция И двоичных представлений iel и ie2. Значение выражения содержит 1 во всех разрядах, в которых и iel и ie2 содержат 1, и 0 во всех остальных разрядах. Пример: flag = ((х & mask) != 0); I Использование: iel | ie2 Побитовая операция ИЛИ двоичных представлений iel и ie2. Значение выражения содержит 1 во всех разрядах, в которых iel или ie2 содержит 1, и 0 во всех остальных разрядах. Пример: attrsum= attrl I attr2: *> Использование: iel* ie2 Побитовая операция исключающее ИЛИ двоичных представлений iel и ie2. Значение выражения содержит 1 в тех разрядах, в которых iel и ie2 имеют разные двоичные значения, и 0 во всех остальных разрядах. Пример: diifbits= x'y; |
| & Использование: &v Значением выражения является адрес переменной v. При мер i intptr = &n; * Использование: *ре Значением выражения является переменная, адресуемая указателем ре. Пример: *ptr = с: * Использование: *fpe Значением выражения является функция, адресуемая указателем fpe. Пример: fpe = funcname. (*fpe) (argl,arg2); |
| [ ] Использование: ре [ie] Значением выражения является переменная, отстоящая на ie переменных от адреса, заданного ре. Это значение эквивалентно значению выражения *(ре + ie). Пример: arname [i]= 3; Присвоить значение 3 i-му элементу массива arname. Обратите внимание, что первый элемент массива описывается выражением шпате [о]. |
| Использование: sv^mem Значением выражения является элемент smem структуры или объединения sv. Пример: product.p_revenue = 50; Присвоить значение 50 элементу p_revenue структурной переменной product. -> Использование: spe —> smem Значением выражения является элемент smem структуры (или объединения), на которую (ое) указывает spe. Это значение эквивалентно значению выражения (*spe)^mem. Пример: prodptr -> р ^revenue = 2; Присвоить значение 2 элементу p_revenue структурной переменной, на которую указывает prodptr. |
| ?: Использование: ае ? е1 : е2 или ре ? е1 : е2 Если истинно ае или ре, то выполняется е1; иначе выполняется е2. Значением этого выражения является значение выражения е1 или е2. Пример abs = (i <= 0) ' -i. i,Использование: el, е2 Сначала выполняется выражение е1, потом выражение е2. Значением всего выражения является значение выражения е2. Пример for (i=A, J=B, i<i, i++, j—) p[i] =pdl sizeof Использование: sizeof(e) Число байт, требуемых для размещения данных типа е. ' 'Если е описывает массив, то в этом случае е обозначает весь массив, а не только адрес первого элемента, как во всех остальных операциях. "^ sizeof Использование: sizeof(-nin) Число байт, требуемых для размещения объектов типа тип. Пример п = sizeof(arnaine) / sizeof(mt), Число элементов в массиве целых чисел, определяемое как число байт в массиве, поделенное на число байт, занимаемых одним элементом массива, (тип) Использование: (тип)е Значение е, преобразованное в тип данных тип. Пример х= (float)n/3, Целое значение переменной п преобразуется в число с плавающей точкой перед делением на 3. ( ) Использование: fe(el, е2,..., eN) Вызов функции fe с аргументами е1, е2,..., eN. Значением выражения является значение, возвращаемое функцией. Обратите внимание, что порядок выполнения выражений е1,..., eN не гарантируется (см. с 39) Пример х = sqrt(y), |