45940 (665245), страница 21

Файл №665245 45940 (Язык С) 21 страница45940 (665245) страница 212016-07-31СтудИзба
Просмтор этого файла доступен только зарегистрированным пользователям. Но у нас супер быстрая регистрация: достаточно только электронной почты!

Текст из файла (страница 21)

DEC PDP-11 HONEYWELL IBM 370 INTERDATA 8/32

ASCII ASCII EBCDIC ASCII

CHAR 8 BITS 9 BITS 8 BITS 8 BITS

INT 16 36 32 32

SHORT 16 36 16 16

LONG 32 36 32 32

FLOAT 32 36 32 32

DOUBLE 64 72 64 64

RANGE -38/+38 -38/+38 -76/+76 -76/+76

11. Синтаксическая нотация

В используемой в этом руководстве синтаксической нотации

синтаксические категории выделяются курсивом (прим. перев.:

в настоящее время синтексические категории вместо курсивом

выделяются подчеркиванием), а литерные слова и символы -

жирным шрифтом. Альтернативные категории перечисляются на

отдельных строчках. Необязательный символ, терминальный или

нетерминальный, указывается индексом “необ”, так что

\( выражение

--------- необ \)

указывает на необязательное выражение, заключенное в фигур-

ных скобках. Синтаксис суммируется в пункте 18.

12. Что в имене тебе моем?

Язык “C” основывает интерпретацию идентификатора на двух

признаках идентификатора: его классе памяти и его типе.

Класс памяти определяет место и время хранения памяти, свя-

занной с идентификатором; тип определяет смысл величин, на-

ходящихся в памяти, определенной под идентификатором.

Имеются четыре класса памяти: автоматическая, статичес-

кая, внешняя и регистровая. Автоматические переменные явля-

ются локальными для каждого вызова блока и исчезают при вы-

ходе из этого блока. Статические переменные являются локаль-

ными, но сохраняют свои значения для следующего входа в блок

даже после того, как управление передается за пределы блока.

Внешние переменные существуют и сохраняют свои значения в

течение выполнения всей программы и могут использоваться для

связи между функциями, в том числе и между независимо ском-

пилированными функциями. Регистровые переменные хранятся

(ели это возможно) в быстрых регистрах машины; подобно авто-

матическим переменным они являются локальными для каждого

блока и исчезают при выходе из этого блока.

  • 189 -

В языке “C” предусмотрено несколько основных типов

объектов:

объекты, написанные как символы (CHAR), достаточно вели-

ки, чтобы хранить любой член из соответствующего данной реа-

лизации внутреннего набора символов, и если действительный

символ из этого набора символов хранится в символьной пере-

менной, то ее значение эквивалентно целому коду этого симво-

ла. В символьных переменных можно хранить и другие величины,

но реализация будет машинно-зависимой.

Можно использовать до трех размеров целых, описываемых

как SHORT INT, INT и LONG INT. Длинные целые занимают не

меньше памяти, чем короткие, но в конкретной реализации мо-

жет оказаться, что либо короткие целые, либо длинные целые,

либо те и другие будут эквивалентны простым целым. “Простые”

целые имеют естественный размер, предусматриваемый архиитек-

турой используемой машины; другие размеры вводятся для удво-

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

Целые без знака, описываемые как UNSIGNED, подчиняются

законам арифметики по модулю 2**N, где N - число битов в их

представлении. (На PDP-11 длинные величины без знака не пре-

дусмотрены).

Плавающие одинарной точности (FLOAT) и плавающие двойной

точности (DOUBLE) в некоторых реализациях могут быть синони-

мами.

Поскольку объекты упомянутых выше типов могут быть ра-

зумно интерпретированы как числа, эти типы будут называться

арифметическими. типы CHAR и INT всех размеров совместно бу-

дут называться целочисленными. Типы FLOAT и DOUBLE совместно

будут называться плавающими типами.

Кроме основных арифметических типов существует концепту-

ально бесконечный класс производных типов, которые образуют-

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

массивы объектов большинства типов;

функции, которые возвращают объекты заданного типа;

указатели на объекты данного типа;

структуры, содержащие последовательность объектов

различных типов;

объединения, способные содержать один из нескольких

объектов различных типов.

Вообще говоря, эти методы построения объектов могут при-

меняться рекурсивно.

13. Объекты и L-значения

Объект является доступным обработке участком памяти;

L-значение - это выражение, ссылающееся на объект. Очевидным

примером выражения L-значения является идентификатор. Сущес-

твуют операции, результатом которых являются L-значения; ес-

ли, например, E - выражение указанного типа, то *E является

выражением L-значения, ссылающимся на объект E. Название

“L-значение” происходит от выражения присваивания E1=E2, в

котором левая часть должна быть выражением L-значения. При

последующем обсуждении каждой операции будет указываться,

ожидает ли она операндов L-значения и выдает ли она L-значе-

ние.

  • 190 -

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

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

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

15.1. Первичные выражения

Первичные выражения, включающие ., ->, индексацию и об-

ращения к функциям, группируются слева направо.

Первичное выражение:

идентификатор

константа

строка

(выражение)

первичное-выражение [выражение]

первичное-выражение (список-выражений нео

первичное-L-значение . Идентификатор

первичное-выражение -> идентификатор

список-выражений:

выражение

список-выражений, выражение

Идентификатор является первичным выражением при условии, что

он описан подходящим образом, как это обсуждается ниже. тип

идентификатора определяется его описанием. Если, однако, ти-

пом идентификатора является “массив ...”, то значением выра-

жения, состоящего из этого идентификатора , является указа-

тель на первый объект в этом массиве, а типом выражения бу-

Характеристики

Тип файла
Документ
Размер
2,35 Mb
Материал
Тип материала
Учебное заведение
Неизвестно

Список файлов реферата

Свежие статьи
Популярно сейчас
Зачем заказывать выполнение своего задания, если оно уже было выполнено много много раз? Его можно просто купить или даже скачать бесплатно на СтудИзбе. Найдите нужный учебный материал у нас!
Ответы на популярные вопросы
Да! Наши авторы собирают и выкладывают те работы, которые сдаются в Вашем учебном заведении ежегодно и уже проверены преподавателями.
Да! У нас любой человек может выложить любую учебную работу и зарабатывать на её продажах! Но каждый учебный материал публикуется только после тщательной проверки администрацией.
Вернём деньги! А если быть более точными, то автору даётся немного времени на исправление, а если не исправит или выйдет время, то вернём деньги в полном объёме!
Да! На равне с готовыми студенческими работами у нас продаются услуги. Цены на услуги видны сразу, то есть Вам нужно только указать параметры и сразу можно оплачивать.
Отзывы студентов
Ставлю 10/10
Все нравится, очень удобный сайт, помогает в учебе. Кроме этого, можно заработать самому, выставляя готовые учебные материалы на продажу здесь. Рейтинги и отзывы на преподавателей очень помогают сориентироваться в начале нового семестра. Спасибо за такую функцию. Ставлю максимальную оценку.
Лучшая платформа для успешной сдачи сессии
Познакомился со СтудИзбой благодаря своему другу, очень нравится интерфейс, количество доступных файлов, цена, в общем, все прекрасно. Даже сам продаю какие-то свои работы.
Студизба ван лав ❤
Очень офигенный сайт для студентов. Много полезных учебных материалов. Пользуюсь студизбой с октября 2021 года. Серьёзных нареканий нет. Хотелось бы, что бы ввели подписочную модель и сделали материалы дешевле 300 рублей в рамках подписки бесплатными.
Отличный сайт
Лично меня всё устраивает - и покупка, и продажа; и цены, и возможность предпросмотра куска файла, и обилие бесплатных файлов (в подборках по авторам, читай, ВУЗам и факультетам). Есть определённые баги, но всё решаемо, да и администраторы реагируют в течение суток.
Маленький отзыв о большом помощнике!
Студизба спасает в те моменты, когда сроки горят, а работ накопилось достаточно. Довольно удобный сайт с простой навигацией и огромным количеством материалов.
Студ. Изба как крупнейший сборник работ для студентов
Тут дофига бывает всего полезного. Печально, что бывают предметы по которым даже одного бесплатного решения нет, но это скорее вопрос к студентам. В остальном всё здорово.
Спасательный островок
Если уже не успеваешь разобраться или застрял на каком-то задание поможет тебе быстро и недорого решить твою проблему.
Всё и так отлично
Всё очень удобно. Особенно круто, что есть система бонусов и можно выводить остатки денег. Очень много качественных бесплатных файлов.
Отзыв о системе "Студизба"
Отличная платформа для распространения работ, востребованных студентами. Хорошо налаженная и качественная работа сайта, огромная база заданий и аудитория.
Отличный помощник
Отличный сайт с кучей полезных файлов, позволяющий найти много методичек / учебников / отзывов о вузах и преподователях.
Отлично помогает студентам в любой момент для решения трудных и незамедлительных задач
Хотелось бы больше конкретной информации о преподавателях. А так в принципе хороший сайт, всегда им пользуюсь и ни разу не было желания прекратить. Хороший сайт для помощи студентам, удобный и приятный интерфейс. Из недостатков можно выделить только отсутствия небольшого количества файлов.
Спасибо за шикарный сайт
Великолепный сайт на котором студент за не большие деньги может найти помощь с дз, проектами курсовыми, лабораторными, а также узнать отзывы на преподавателей и бесплатно скачать пособия.
Популярные преподаватели
Добавляйте материалы
и зарабатывайте!
Продажи идут автоматически
6529
Авторов
на СтудИзбе
301
Средний доход
с одного платного файла
Обучение Подробнее