Преобразования

Язык С
Строк программы, исключая математическое обеспечение Является учебным введением в центральную часть языка “C” Hачинаем. Единственный способ освоить новый язык Оператор FOR Набор полезных программ Подсчет символов Подсчет слов Функции Аргументы - вызов по значению Область действия: внешние переменные Резюме Константы Описания Преобразование типов До 9 и буквы от а до F Операции и выражения присваивания Старшинство и порядок вычисления Операторы и блоки Переключатель Цикл DO - WHILE Оператор CONTINUE Основные сведения Функции, возвращающие нецелые значения Еще об аргументах функций Правила, определяющие область действия Статические переменные Блочная структура Рекурсия Указатели и адреса Указатели и массивы Адресная арифметика Указатели символов и функции Указатели - не целые До 12, а не от 0 до 11. Так как за экономию памяти у нас пока не награждают, такой способ проще, чем подгонка индек-сов Инициализация массивов указателей Указатели на функции Структуры Структуры и функции Указатели на структуры Мы продемонстрируем, как правильно выполнить эту задачу Поля Определение типа Обращение к стандартной библиотеке Форматный вывод - функция PRINTF Форматный ввод - функция SCANF Форматное преобразование в памяти Обработка ошибок - STDERR и EXIT Обращение к системе Низкоуровневый ввод/вывод - операторы READ и WRITE Произвольный доступ - SEEK и LSEEK Пример - распечатка справочников Пример - распределитель памяти Константы Синтаксическая нотация Преобразования Первичные выражения Унарные операции Аддитивные операции Операция присваивания Спецификаторы типа Описание структур и объединений Инициализация TYPEDEF Оператор SWITCH Внешнее определение функции Область действия внешних идентификаторов Неявные описания Явные преобразования указателей Анахронизмы Операторы
439386
знаков
0
таблиц
0
изображений

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 и при всех особых случаях

с плавающими числами меняется от машины к машине и обычно

выполняется с помощью библиотечной функции.


Информация о работе «Язык С»
Раздел: Информатика, программирование
Количество знаков с пробелами: 439386
Количество таблиц: 0
Количество изображений: 0

Похожие работы

Скачать
48443
0
0

... основаниям. При этом философская абстракция языка оказывается неразрывно связана с основными темами и движениями философии в целом. Более конкретно, на ранние стадии традиционно рассматриваемого в рамках АФ анализа обыденного языка глубокое влияние оказала философия Дж. Э. Мура, особенно его учение о здравом смысле, согласно которому такие понятия, как «человек», «мир», «я», «внешний мир», « ...

Скачать
43709
0
0

... и других странах СНГ, а также облегчение доступа к русской и мировой культуре и науке. Таким образом, судя по данным наших исследований, востребованность русского языка осталась в республике достаточно высокой. Многие представители современной молдавской молодежи продолжают, как их отцы и деды, тянуться к русской культуре, научным и техническим достижениям России. Русский язык остается языком ...

Скачать
39778
0
1

... рисуночное словесно-слоговое письмо). Памятники среднеэламского периода (14—12 вв. до н.э.) выполнены аккадской клинописью. Памятники новоэламского периода относятся к 8—6 вв. до н.э. Был официальным языком в персидском государстве Ахеменидов в 6—4 вв. предполагается, что он, подвергшись влиянию древнеперсидского, сохранился до раннего средневековья. 7. Бурушаски язык Язык бурушаски ( ...

Скачать
64931
0
0

... /диалект), скифский, согдийский, среднеперсидский, таджикский, таджриши (язык/диалект), талышский, татский, хорезмийский, хотаносакский, шугнано-рушанская группа языков, ягнобский, язгулямский и др. Они относятся к индоиранской ветви индоевропейских языков. Области распространения: Иран, Афганистан, Таджикистан, некоторые районы Ирака, Турции, Пакистана, Индии, Грузии, Российской Федерации. Общее ...

0 комментариев


Наверх