Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
PYaVU_s.doc
Скачиваний:
44
Добавлен:
24.02.2016
Размер:
665.09 Кб
Скачать
      1. Type-cast выражения

Type-cast выражения имеют следующий синтаксис:

(<type-name>)<operand>

Type-cast преобразования рассматриваются в разделе 5.7.2., имена типов представлены в разделе 4.9.

      1. Константные выражения

Константное выражение- это выражение, результатом вычисления которого является константа. Операндами константного выражения могут быть целые константы, константы символы, плавающие константы, константы перечиисления, type-cast выражения целого и плавающего типов и другие константные выражения. Операнды могут комбинироваться и модифицироваться посредством операций точно так же как это описано в разделе 5.2.7. Константные выражения не могут использовать операции присваивания (смотри раздел 5.4) или бинарную операцию последовательного вычисления. Унарная операция адресации "&" может быть использована только при некоторых инициализациях (смотри последний абзац раздела 5.2.10).

Константные выражения, используемые в директивах препроцессора, имеют дополнительные ограничения, поэтому называются ограниченными константными выражениями <restricted-constant-expression>. Ограниченые константные выражения не могут содержать sizeof-выражений, констант перечисления или type-cast выражений любого типа. Они могут, однако, содержать специальные константные, имеющие синтаксис defined(<identifier>).

Более полная информация дана в разделе 8.1.1. "Директива #define".

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

В этих выражениях допускается сложение или вычитание с адресными подвыражениями.

    1. Операции

Си-операции требуют один операнд (унарные операции), два операнда (бинарные операции) или три операнда (тернарная операция). Операции присваивания- это унарные или бинарные операции. Операции присваивания описываются в разделе 5.4.

Унарными операциями Си являются следующие:

Символ

Наименование

- ~ !

операции дополнения

* &

операции разадресации и адресации

sizeof

size- операция

Интерпретация унарных операций производится справа налево.

Бинарные операции интерпретируются слева направо.

Бинарными операциями являются следующие:

Символ

Наименование

* / %

мультипликативные операции

+ -

аддитивные операции

<< >>

операции сдвига

< > <= >= == !=

операции отношений

& | ^

операции с битами

&& ||

логические операции

,

операция последовательных вычислений

В Си имеется одна тернарная операция- это операция условия "?:". Она интерпретируется справа налево.

      1. Обычные арифметические преобразования.

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

Арифметические преобразования, приведенные ниже, называются "обычные арифметические преобразования". Специфические особенности каждого типа преобразования рассмотрены в разделе 5.7.

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

  1. Операнды типа float преобразуются к типу double.

  2. Если один операнд типа double, то второй операнд преобразуется к типу double.

  3. Любые операнды типов char или short преобразуются к int.

  4. Любые операнды типов unsigned char или unsigned short преобразуются к типу unsigned int.

  5. Если один операнд типа unsigned long, то второй операнд преобразуется к типу unsigned long.

  6. Если один операнд типа long, то второй операнд преобразуется к типу long.

  7. Если один операнд типа unsigned int, то второй операнд преобразуется к unsigned int.