14. Преобразования
Ряд операций может в зависимости от своих операндов вы-
зывать преобразование значение операнда из одного типа в
другой. В этом разделе объясняются результаты, которые сле-
дует ожидать от таких преобразований. В п. 14.6 Подводятся
итоги преобразований, требуемые большинством обычных опера-
ций; эти сведения дополняются необходимым образом при обсуж-
дении каждой операции.
14.1. Символы и целые
Символ или короткое целое можно использовать всюду, где
можно использовать целое. Во всех случаях значение преобра-
зуется к целому. Преобразование более короткого целого к бо-
лее длинному всегда сопровождается знаковым расширением; це-
лые являются величинами со знаком. Осуществляется или нет
знаковое расширение для символов, зависит от используемой
машины, но гарантируется, что член стандартного набора сим-
волов неотрицателен. из всех машин, рассматриваемых в этом
руководстве, только PDP-11 осуществляет знаковое расширение.
область значений символьных переменных на PDP-11 меняется от
· 128 до 127; символы из набора ASC11 имеют положительные
значения. Символьная константа, заданная с помощью восьме-
ричной условной последовательности, подвергается знаковому
расширению и может оказаться отрицательной; например, '\377'
имеет значение -1.
Когда более длинное целое преобразуется в более короткое
или в CHAR, оно обрезается слева; лишние биты просто отбра-
сываются.
14.2. Типы FLOAT и DOUBLE
Вся плавающая арифметика в “C” выполняется с двойной
точностью каждый раз, когда объект типа FLOAT появляется в
выражении, он удлиняется до DOUBLE посредством добавления
нулей в его дробную часть. когда объект типа DOUBLE должен
быть преобразован к типу FLOAT, например, при присваивании,
перед усечением DOUBLE округляется до длины FLOAT.
14.3. Плавающие и целочисленные величины
Преобразование плавающих значений к целочисленному типу
имеет тенденцию быть до некоторой степени машинно-зависимым;
в частности направление усечения отрицательных чисел меняет-
ся от машине к машине. Результат не определен, если значение
не помещается в предоставляемое пространство.
Преобразование целочисленных значений в плавающие выпол-
няется без осложнений. Может произойти некоторая потеря точ-
ности, если для результата не содержится достаточного коли-
чества битов.
14.4. Указатели и целые
Целое или длинное целое может быть прибавлено к указате-
лю или вычтено из него; в этом случае первая величина преоб-
разуется так, как указывается в разделе описания операции
сложения.
· 191 -
Два указателя на объекты одинакового типа могут быть
вычтены; в этом случае результат преобразуется к целому, как
указывается в разделе описания операции вычитания.
14.5. Целое без знака
Всякий раз, когда целое без знака объединяется с простым
целым, простое целое преобразуется в целое без знака и ре-
зультат оказывается целым без знака. Значением является наи-
меньшее целое без знака, соответствующее целому со знаком
(по модулю 2**размер слова). В двоичном дополнительном пред-
ставлении это преобразование является чисто умозрительным и
не изменяет фактическую комбинацию битов.
Когда целое без знака преобразуется к типу LONG, значе-
ние результата совпадает со значением целого без знака. Та-
ким образом, это преобразование сводится к добавлению нулей
слева.
14.6. Арифметические преобразования
Подавляющее большинство операций вызывает преобразование
и определяет типы результата аналогичным образом. Приводимая
ниже схема в дальнейшем будет называться “обычными арифмети-
ческими преобразованиями”.
Сначала любые операнды типа CHAR или SHORT преобразуются в
INT, а любые операнды типа FLOAT преобразуются в DOUBLE.
Затем, если какой-либо операнд имеет тип DOUBLE, то другой
преобразуется к типу DOUBLE, и это будет типом результата.
В противном случае, если какой-либо операнд имеет тип LONG,
то другой операнд преобразуется к типу LONG, и это и будет
типом результата.
В противном случае, если какой-либо операнд имеет тип
UNSIGNED, то другой операнд преобразуется к типу UNSIGNED,
и это будет типом результата.
В противном случае оба операнда будут иметь тип INT, и это
будет типом результата.
15. Выражения
Старшинство операций в выражениях совпадает с порядком
следования основных подразделов настоящего раздела, начиная
с самого высокого уровня старшинства. Так, например, выраже-
ниями, указываемыми в качестве операндов операции +
(п.15.4), Являются выражения, определенные в п.п.15.1-15.3.
Внутри каждого подраздела операции имеет одинаковое старшин-
ство. В каждом подразделе для описываемых там операций ука-
зывается их ассоциативность слева или справа. Старшинство и
ассоциативность всех операций в выражениях резюмируются в
грамматической сводке в п.18.
В противном случае порядок вычислений выражений не опре-
делен. В частности, компилятор считает себя в праве вычис-
лять подвыражения в том порядке, который он находит наиболее
эффективным, даже если эти подвыражения приводят к побочным
эффектам. Порядок, в котором происходят побочные эффекты, не
специфицируется. Выражения, включающие коммутативные и ассо-
циативные операции ( *,+,&,!,^ ), могут быть переупорядочены
произвольным образом даже при наличии круглых скобок; чтобы
вынудить определенный порядок вычислений, в этом случае не-
обходимо использовать явные промежуточные переменные.
· 192 -
При вычислении выражений обработка переполнения и про-
верка при делении являются машинно-зависимыми. Все существу-
ющие реализации языка “C” игнорируют переполнение целых; об-
работка ситуаций при делении на 0 и при всех особых случаях
с плавающими числами меняется от машины к машине и обычно
выполняется с помощью библиотечной функции.
... основаниям. При этом философская абстракция языка оказывается неразрывно связана с основными темами и движениями философии в целом. Более конкретно, на ранние стадии традиционно рассматриваемого в рамках АФ анализа обыденного языка глубокое влияние оказала философия Дж. Э. Мура, особенно его учение о здравом смысле, согласно которому такие понятия, как «человек», «мир», «я», «внешний мир», « ...
... и других странах СНГ, а также облегчение доступа к русской и мировой культуре и науке. Таким образом, судя по данным наших исследований, востребованность русского языка осталась в республике достаточно высокой. Многие представители современной молдавской молодежи продолжают, как их отцы и деды, тянуться к русской культуре, научным и техническим достижениям России. Русский язык остается языком ...
... рисуночное словесно-слоговое письмо). Памятники среднеэламского периода (14—12 вв. до н.э.) выполнены аккадской клинописью. Памятники новоэламского периода относятся к 8—6 вв. до н.э. Был официальным языком в персидском государстве Ахеменидов в 6—4 вв. предполагается, что он, подвергшись влиянию древнеперсидского, сохранился до раннего средневековья. 7. Бурушаски язык Язык бурушаски ( ...
... /диалект), скифский, согдийский, среднеперсидский, таджикский, таджриши (язык/диалект), талышский, татский, хорезмийский, хотаносакский, шугнано-рушанская группа языков, ягнобский, язгулямский и др. Они относятся к индоиранской ветви индоевропейских языков. Области распространения: Иран, Афганистан, Таджикистан, некоторые районы Ирака, Турции, Пакистана, Индии, Грузии, Российской Федерации. Общее ...
0 комментариев