Заглавная страница Избранные статьи Случайная статья Познавательные статьи Новые добавления Обратная связь FAQ Написать работу КАТЕГОРИИ: ТОП 10 на сайте Приготовление дезинфицирующих растворов различной концентрацииТехника нижней прямой подачи мяча. Франко-прусская война (причины и последствия) Организация работы процедурного кабинета Смысловое и механическое запоминание, их место и роль в усвоении знаний Коммуникативные барьеры и пути их преодоления Обработка изделий медицинского назначения многократного применения Образцы текста публицистического стиля Четыре типа изменения баланса Задачи с ответами для Всероссийской олимпиады по праву
Мы поможем в написании ваших работ! ЗНАЕТЕ ЛИ ВЫ?
Влияние общества на человека
Приготовление дезинфицирующих растворов различной концентрации Практические работы по географии для 6 класса Организация работы процедурного кабинета Изменения в неживой природе осенью Уборка процедурного кабинета Сольфеджио. Все правила по сольфеджио Балочные системы. Определение реакций опор и моментов защемления |
Фрагменты стандарта языка СиСодержание книги
Поиск на нашем сайте Классификация типов типы::= типы_данных | функциональные_типы | неполные_типы
типы_данных::= скалярные_типы | нескалярные_типы скалярные_типы::= арифметические типы | указатели арифметические_типы::= целочисленные_типы | плавающие_типы целочисленные_типы::= char | signed char | unsigned char | short | unsigned short | int | unsigned int | long | unsigned long | перечислимые типы | поля_битов плавающие_типы::= float | double | long double указатели::= указатели_на_данные | указатели_на_функции | указатели_на_неполные_типы нескалярные_типы::= структуры | массивы | объединения неполные_типы::= неполные_структуры | неполные_массивы | неполные_объединения | void
Приоритеты и порядок выполнения операций
Операции выполняются ---------------------------------------------------------------------------------------------------------------- () [ ] ®. постфиксные ++ и - -слева направо (®)
! ~ префиксные ++ и - - унарные + - * & ( тип ) sizeof справа налево ()
* / % слева направо (®) + - слева направо (®)
<< >> слева направо (®)
< <= > >= слева направо (®)
==!= слева направо (®)
& слева направо (®)
^ слева направо (®)
| слева направо (®) && слева направо (®)
|| слева направо (®) ?: справа налево () = += -= *= /= %= &= ^= |= <<= >>= справа налево ()
, слева направо (®)
Несмотря на строго определенный приоритет операций, при вычислении выражения существует некоторая свобода в выборе порядка вычисления его подвыражений. Например, y = *p++; может быть вычислено как temp = p; p += 1; y = *temp; либо как y = *p; p += 1; Порядок вычислений важен для понимания того, когда проявляется побочный эффект. Побочный эффект при вычислении выражения - это занесение в память значений объектов, изменение состояния файла либо доступ к volatile - объектам. Точка последовательных вычислений (sequence point) - это точка в программе, где можно точно определить, какие из побочных эффектов уже проявились, а какие - еще нет. Если выражение является частью оператора, то точкой, где заведомо выполнились все побочные эффекты его вычисления - это конец этого оператора. Например, в y = 37; x += y; можно быть уверенным, что 37 будет занесено в y раньше, чем значение y будет извлечено из памяти при вычислении суммы x + y. Кроме того, точки последовательных вычислений могут быть расположены внутри самого выражения: n при выполнении операции x, y такая точка находится между вычислением x и y; n при выполнении операции z? x: y такая точка находится между вычислением z и вычислением x либо y; n при вызове функции все побочные эффекты вычисления значений ее аргументов проявятся перед выполнением ее тела; n при выполнении операций x && y и x || y такая точка находится между вычислением x и вычислением y. Например, в if ((c = getchar())!= EOF && isprint(c)) вызов функции isprint(c) произойдет только после того, как переменная c получит новое значение. Между двумя точками последовательных вычислений изменение значения переменной возможно не более одного раза. Например, верно val = 10 * val + (c - ‘0’); но неверно i = ++i + 2; Выражение может содержать точки последовательных вычислений, и тем не менее, порядок вычислений не будет однозначным. Например, f(x) + g(x) содержит такие точки, однако операция + допускает произвольный порядок вычисления ее операндов.
10.2.3 Арифметические преобразования при выполнении арифметических операций вида X op Y 1. если есть операнд типа short или signed char, то он преобразуется к int; если есть операнд типа char, unsigned char или unsigned short, и все значения этого типа могут быть представлены как int, то он преобразуется к int; иначе - к unsigned int. Это преобразование называется «целочисленное расширение» (promoting). 2. если после выполнения п.1 операнды имеют различные типы, то осуществляется их приведение к общему типу. Общим для двух типов (кроме случая «unsigned int - long») является тот, который расположен позже в последовательности int, unsigned int, long, unsigned long, float, double, long double. Если операнды имеют типы unsigned int и long, и все значения типа unsigned int могут быть представлены как long, то общим типом является long; иначе - unsigned long. Это преобразование называют «согласование типов» (balansing). 3. после этого выполняется арифметическая операция; тип результата - это тип, к которому были приведены оба операнда.
10.2.4 Арифметические преобразования при выполнении присваивания и явного приведения
|
||
|
Последнее изменение этой страницы: 2017-02-05; просмотров: 309; Нарушение авторского права страницы; Мы поможем в написании вашей работы! infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 216.73.217.21 (0.006 с.) |