Управляющие символьные константы. Символьные и строковые константы. Константы в программах

Символьная константа - это последовательность из одной или нескольких символов, заключенная в одиночные кавычки (например "x" ). Если внутри одиночных кавычек расположен один символ, значением константы является числовое значение этого символа в кодировке, принятой на данной машине. Значение константы с несколькими символами зависит от реализации.

Символьная константа не может содержать в себе одиночную кавычку " или символ новой строки; чтобы изобразить их и некоторые другие символы, могут быть использованы эскейп-последовательности :

Эскейп-последовательность \ooo состоит из обратной наклонной черты, за которой следуют одна, две или три восьмеричные цифры, специфицирующие значение желаемого символа. Наиболее частым примером такой конструкции является \0 (за которой не следует цифра); она специфицирует NULL-символ. Эскейп-последовательность \xhh состоит из обратной наклонной черты с буквой x , за которыми следуют шестнадцатеричные цифры, специфицирующие значение желаемого символа. На количество цифр нет ограничений, но результат будет не определен, если значение полученного символа превысит значение самого "большого" из допустимых символов. Если в данной реализации тип char трактуется как число со знаком, то значение и в восьмеричной, и в шестнадцатеричной эскейп-последовательности получается с помощью "распространения знака", как если бы выполнялась операция приведения к типу char . Если за \ не следует ни один из перечисленных выше символов, результат не определен.

В некоторых реализациях имеется расширенный набор символов, который не может быть охвачен типом char . Константа для такого набора пишется с буквой L впереди (например L"x") и называется расширенной символьной константой. Такая константа имеет тип wchar_t (целочисленный тип, определенный в стандартном заголовочном файле ). Как и в случае обычных символьных констант, здесь также возможны восьмеричные и шестнадцатеричные эскейп- последовательности; если специфицированное значение превысит тип wchar_t , результат будет не определен.

Некоторые из приведенных эскейп-последовательностей новые (шестнадцатеричные в частности). Новым является и расширенный тип для символов. Наборам символов, обычно используемым в Америке и Западной Европе, подходит тип char , а тип wchar_t был добавлен главным образом для азиатских языков.

А2.5.3. Константы с плавающей точкой

Константа с плавающей точкой состоит из целой части, десятичной точки, дробной части, e или E и целого (возможно, со знаком), представляющего порядок, и, возможно, суффикса типа, задаваемого одной из букв: f , F , l или L . И целая, и дробная часть представляют собой последовательность цифр. Либо целая часть, либо дробная часть (но не обе вместе) могут отсутствовать; также могут отсутствовать десятичная точка или E с порядком (но не обе одновременно). Тип определяется суффиксом: F или f определяют тип float , L или l - тип long double ; при отсутствии суффикса подразумевается тип double .

Суффиксы для констант с плавающей точкой являются нововведением.

A2.5.4. Константы-перечисления

Идентификаторы, объявленные как элементы перечисления (A8.4), являются константами типа int .

A2.6. Строковые литералы

Строковый литерал, который также называют строковой константой, - это последовательность символов, заключенная в двойные кавычки (Например, "..."). Строка имеет тип "массив символов" и память класса static (A4), которая инициализируется заданными символами. Представляются ли одинаковые строковые литералы одной копией или несколькими, зависит от реализации. Поведение программы, пытающейся изменить строковый литерал, не определено.

Написанные рядам строковые литералы объединяются (конкатенируются) в одну строку. После любой конкатенации к строке добавляется NULL-байт (\0), что позволяет программе, просматривающей строку, найти ее конец. Строковые литералы не могут содержать в себе символ новой строки или двойную кавычку; в них нужно использовать те же эскейп-последовательности, что и в символьных константах.

Как и в случае с символьными константами, строковый литерал с символами из расширенного набора должен начинаться с буквы L (например L"..."). Строковый литерал из расширенного набора имеет тип "массив из wchar_t ". Конкатенация друг с другом обычных и "расширенных" строковых литералов не определена.

То, что строковые литералы не обязательно представляются разными копиями, запрет на их модификацию, а также конкатенация соседних строковых литералов - нововведения ANSI-стандарта. "Расширенные" строковые литералы также объявлены впервые.

A3. Нотация синтаксиса

В нотации синтаксиса, используемой в этом руководстве, синтаксические понятия набираются курсивом, а слова и символы, воспринимаемые буквально, обычным шрифтом. Альтернативные конструкции обычно перечисляются в столбик (каждая альтернатива на отдельной строке); в редких случаях длинные списки небольших по размеру альтернатив располагаются в одной строке, помеченной словами "один из". Необязательное слово-термин или не термин снабжается индексом "необ .". Так, запись

{ выражение необ }

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

В отличие от грамматики, данной в первом издании этой книги, приведенная здесь грамматика старшинство и порядок выполнения операций в выражениях описывает явно.

A4. Что обозначают идентификаторы

Идентификаторы, или имена, ссылаются на разные объекты (в оригинале - things . - Примеч. ред.): функции; теги структур, объединений и перечислений; элементы структур или объединений; typedef -имена; метки и объекты. Объектом (называемым иногда переменной) является часть памяти, интерпретация которой зависит от двух главных характеристик: класса памяти н ее типа . Класс памяти сообщает о времени жизни памяти, связанной с идентифицируемым объектом, тип определяет, какого рода значения находятся в объекте. С любым именем ассоциируются своя область видимости (т. е. тот участок программы, где это имя известно) и атрибут связи, определяющий, обозначает ли это имя в другом файле тот же самый объект или функцию. Область видимости и атрибут связи обсуждаются в A11.

A4.1. Класс памяти

Существуют два класса памяти: автоматический и статический . Несколько ключевых слов в совокупности с контекстом объявлений объектов специфицируют класс памяти для этих объектов.

Автоматические объекты локальны в блоке (A9.3), при выходе из него они "исчезают". Объявление, заданное внутри блока, если в нем отсутствует спецификация класса памяти или указан спецификатор auto, создаст автоматический объект. Объект, помеченный в объявлении словом register , является автоматическим и размещается по возможности в регистре машины.

Статические объекты могут быть локальными в блоке или располагаться вне блоков, но в обоих случаях их значения сохраняются после выхода из блока (или функции) до повторного в него входа. Внутри блока (в том числе и в блоке, образующем тело функции) статические объекты в объявлениях помечаются словом static . Объекты, объявляемые вне всех блоков на одном уровне с определениями функций, всегда статические. С помощью ключевого слова static их можно сделать локальными в пределах транслируемой единицы (в этом случае они получают атрибут внутренней связи ), и они становятся глобальными для всей программы, если опустить явное указание класса памяти или использовать ключевое слово extern (в этом случае они получают атрибут внешней связи ).

A4.2. Базовые типы

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

Размер объектов, объявляемых как символы, позволяет хранить любой символ из набора символов, принятого в машине. Если объект типа char действительно хранит символ из данного набора, то его значением является код этого символа, т. е. некоторое неотрицательное целое. Переменные типа char могут хранить и другие значения, но тогда диапазон их значений и особенно вопрос о том, знаковые эти значения или беззнаковые, зависит от реализации.

Беззнаковые символы, объявленные с помощью слов unsigned char , имеют ту же разрядность, что и обычные символы, но представляют неотрицательные значения; с помощью слов signed char можно явно объявить символы со знаком, которые занимают столько же места, как и обычные символы.

Тип unsigned char не упоминался в первой редакции языка, но всеми использовался. Тип signed char - новый.

Помимо char среди целочисленных типов могут быть целые трех размеров: short int , int и long int . Обычные объекты типа int имеют естественный размер, принятый в архитектуре данной машины, другие размеры предназначены для специальных нужд. Более длинные целые по крайней мере покрывают все значения более коротких целых, однако в некоторых реализациях обычные целые могут быть эквивалентны коротким (short ) или длинным (long ) целым. Все типы int представляют значения со знаком, если не оговорено противное.

Для беззнаковых целых в объявлениях используется ключевое слово unsigned . Такие целые подчиняются арифметике по модулю 2 в степени n , где n - число битов в представлении числа, и, следовательно, в арифметике с беззнаковыми целыми никогда не бывает переполнения. Множество неотрицательных значений, которые могут храниться в объектах со знаком, является подмножеством значений, которые могут храниться в соответствующих объектах без знака; знаковое и беззнаковое представления каждого такого значения совпадают. Любые два из типов с плавающей точкой: с одинарной точностью (float ), с двойной точностью (double ) и с повышенной точностью (long double ) могут быть синонимами, но каждый следующий тип этого списка должен по крайней мере обеспечивать точность предыдущего.

long double - новый тип. В первой редакции языка синонимом для double был long float , теперь последний изъят из обращения.

Перечисления - единственные в своем роде типы, которым дается полный перечень значений; с каждым перечислением связывается множество именованных констант (A8.4). Перечисления ведут себя наподобие целых, но компилятор обычно выдает предупреждающее сообщение, если объекту некоторого перечислимого типа присваивается нечто, отличное от его константы, или выражение не из этого перечисления.

Поскольку объекты перечислений можно рассматривать как числа, перечисление относится к арифметическому типу. Типы char и int всех размеров, каждый из которых может быть со знаком или без знака, а также перечисления называют целочисленными (integral ) типами. Типы float , double и long double называются типами с плавающей точкой .

Тип void специфицирует пустое множество значений. Он используется как "тип возвращаемого функцией значения" в том случае, когда она не генерирует никакого результирующего значения.

A4.3. Производные типы

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

· массивы объектов заданного типа;

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

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

· структуры , содержащие последовательность объектов, возможно, различных заданных типов;

· объединения , каждое из которых может содержать любой из нескольких объектов различных заданных типов.

В общем случае приведенные методы конструирования объектов могут применяться рекурсивно.

A4.4. Квалификаторы типов

Тип объекта может снабжаться квалификатором. Объявление объекта с квалификатором const указывает на то, что его значение далее не будет изменяться; объявляя объект как volatile (изменчивый, непостоянный (англ. )), мы указываем на его особые свойства для выполняемой компилятором оптимизации. Ни один из квалификаторов на диапазоны значений и арифметические свойства объектов не влияет. Квалификаторы обсуждаются в A8.2.

A5. Объекты и Lvalues

Объект - это некоторая именованная область памяти; lvalue - это выражение, обозначающее объект. Очевидным примером lvalue является идентификатор с соответствующим типом и классом памяти. Существуют операции, порождающие lvalue . Например, если E - выражение типа указатель, то *E есть выражение для lvalue , обозначающего объект, на который указывает E . Термин "lvalue " произошел от записи присваивания E1 = E2, в которой левый (left - левый (англ. ), отсюда буква l , value - значение) операнд E1 должен быть выражением lvalue . Описывая каждый оператор, мы сообщаем, ожидает ли он lvalue в качестве операндов и выдает ли lvalue в качестве результата.

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

Некоторые операторы в зависимости от своих операндов мoгут вызывать преобразование их значений из одного типа в другой. В этом параграфе объясняется, что следует ожидать от таких преобразований. В A6.5 формулируются правила, по которым выполняются преобразования для большинства обычных операторов. При рассмотрении каждого отдельного оператора эти правила могут уточняться.

В языке Си символы заключаются в апострофы. Поэтому, когда мы присваиваем какое-то значение переменной broiled типа char , мы должны писать

broiled = " Т "; /* ПРАВИЛЬНО */,

broiled = Т; /* НЕПРАВИЛЬНО */

Если апострофы опущены, компилятор "считает", что мы используем переменную с именем Т , которую забыли описать.

В стандарте языка Си принято правило, согласно которому значениями переменной или константы типа char могут быть только одиночные символы. В соответствии с этим последовательность операторов, указанная ниже, является недопустимой, поскольку там делается попытка присвоить переменной bovine значение, состоящее из двух символов:

ehar bovine;

bovine = " ox "; /*НЕПРАВИЛЬНО */

Если вы посмотрите на таблицу кода ASCII, то увидите, что некоторые из "символов" в ней не выводятся на печать. Например, при использовании в программе символа номер 7 терминал компьютера издает звуковой сигнал. Но как использовать символ, который невозможно набрать на клавиатуре? В языке Си для этого имеются два способа.

В первом способе используется сам код ASCII. Вы должны только указать номер символа вместе с предшествующим знаком "обратная косая черта". Мы уже делали это в нашей программе "золотой эквивалент". Вот эта строка

beep = " 07 ";

Здесь имеются два важных момента, которые вы должны отчетливо представлять себе. Первый - это то, что последовательность знаков заключается в апострофы точно так же, как это делается с обычным символом. Второе - то, что номер символа должен быть записан в восьмеричном виде. При записи последовательности знаков мы можем случайно пропустить нули в первых позициях; в этом случае для представления кода "сигнал" мы могли бы использовать "7" или даже "7" . Но ни в коем случае не опускайте в записи последние нули! Последовательность символов "20" можно записать в виде "20" , но не "2" .

При использовании кода ASCII необходимо отметить различие между числами и символами, обозначающими числа. Например, символу "4" соответствует код ASCII, равный 52. Это символ "4" а не число 4.

РИС. 3. 4. Формы записи констант целых типов

Во втором способе представления "неудобных" знаков используются специальные последовательности символов. Они называются управляющими последовательностями и выглядят следующим образом:

n новая строка

t табуляция

b шаг назад

r возврат каретки

f подача бланка

обратная косая черта ()

" апостроф (")

" кавычки (")

При присваивании символьной переменной эти последовательно сти тоже должны быть заключены в апострофы. Например, мы могли бы написать оператор

nerf = " n ";

а затем вывести на печать переменную nerf; это приведет к продвижению на одну строку вперед на печатающем устройстве или на экране дисплея.

Первые пять управляющих последовательностей являются общепринятыми символами, предназначенными для управления работой печатающего устройства:

символ "новая строка" вызывает переход к новой строке;

символ "табуляция" сдвигает курсор или печатающую головку на некоторое фиксированное число позиций 5 или 8;

символ "шаг назад" производит сдвиг назад на одну позицию;

символ "возврат каретки" осуществляет возврат к началу строки;

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

В последних трех управляющих последовательностях символы , " , " можно считать символьными константами [поскольку они служат для определения символьных констант и непосредственно используются в операторе printf() , применение их самих в качестве символов могло бы привести к ошибке]. Если вы хотите вывести на печать строку.

Запомните, " символ называется обратная косая черта".

оператор будет выглядеть так:

printf(" Запомните, " символ называется обратная косая черта. " n");

Здесь у вас могут возникнуть два вопроса. Во-первых, почему мы не заключили управляющие последовательности в апострофы? Во-вторых, в каких случаях необходимо использовать код ASCII и когда управляющие последовательности, которые мы только что обсуждали? (Мы надеемся, что у вас возникли как раз эти вопросы, ПОТОМУ что мы собираемся отвечать именно на них.)

Символьная константа – это некоторый символ алфавита, заключенный в одиночные кавычки: "<символ_алфавита>" .

Примеры символьных констант: " a " " B " "=" "+" " F " "[" " d ".

Значением символьной константы является целое число, равное (American Standard Code for Information Interchange, Американский стандартный код обмена информацией) данного символа. Символьная константа имеет тип int(char) и представляется 16(8)-битной величиной.

В имеются коды, которые не отображаются при печати, а производят некоторые действия, например, перевод на новую строку (LF), подача звукового сигнала, гудка – BELL) и т. д. Для таких кодов на клавиатуре не предусмотрено отдельных клавиш, и при вводе с клавиатуры они набираются сочетанием определенных клавиш: например, нажатие клавиши Ctrl и G влечет за собой поступление в память кода "гудок", а при выводе символа, имеющего значение кода "гудок", компьютер подает звуковой сигнал.

Возникает вопрос: каким образом использовать подобные коды в программе? Для этого Си предоставляет два способа, имеющих непосредственное отношение к символьным константам.

Первый способ . Любой символ в можно определить в виде символьной константы следующим образом:

"\ddd" или "\xHHH",

где ddd – восьмеричный, а HHH шестнадцатеричный код символа. Ведущие нули в представлении кода символа можно не записывать. Таким образом, в соответствии с этим вышеуказанные примеры символьных констант можно записать

" a "

" B "

" F "

" d "

Символ, вызывающий подачу звукового сигнала, записывается в виде "\07", а символ, вызывающий перевод печати на новую строку – "\x0A".

Второй способ заключается в том, что часто используемые неотображаемые символы не нужно записывать их кодами, а можно использовать для них зарезервированные обозначения. Эти символы в Си выделены в класс управляющих символов, представленных в таблице 3.3.

Таблица 3.3. Управляющие символы

Символ Си Символ ASCII Название символа
Новая строка
Горизонтальная табуляция
Вертикальная табуляция
Шаг назад
Возврат каретки
Подача бланка
Гудок
Одинарная кавычка
Двойная кавычка
Обратная дробная черта
Вопрос

Если управляющие символы встречаются, например, в строке вывода, то они вызывают соответствующее действие. Первые шесть управляющих символов являются символами управления работой печатающего устройства: символ "новая строка " переводит печать на начало следующей строки; символ "горизонтальная табуляция " продвигает печать в текущей строке в очередную фиксированную позицию строки. По умолчанию позиции в строке фиксируются через каждые 8 символов. Фиксированные позиции можно изменять, используя так называемые ESC-последовательности, формат которых описывается в документации по принтеру.

Символ "вертикальная табуляция " продвигает печать на начало очередных фиксированных номеров строк, которые также определяются ESC-последовательностью принтера.

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

Символ "подача бланка " производит пропуск оставшейся части текущего текста и начинает печать со следующего нового листа.

Седьмой символ таблицы "гудок " инициирует подачу звукового сигнала. Оставшиеся четыре символа не относятся, по сути, к управляющим, но они включены в таблицу, так как имеют аналогичные зарезервированные обозначения. Их обычное использование в строковых константах (см. следующий раздел 3.1.4.) в качестве символов могло бы привести к ошибке, а использование именно в таком виде позволяет печатать их в строке вывода.

Сказанное не относится к символу "вопрос ". По всей вероятности, символ "вопрос" попал в число зарезервированных символов в связи с тем, что в Си имеется операция, обозначаемая знаком "?", и в некоторых ситуациях это могло бы привести к неоднозначному толкованию конструкций языка. Знак "вопрос", как символьную константу, можно записать любым рассмотренным способом: "?" "\77" "x3F" "\?" .

В заключение раздела обращаем внимание на то, что символьные константы являются целыми константами. Следовательно, допустима запись и двухсимвольных констант, например, таких: "ab" "ta" "ma" "do". Однако в этом случае их необходимо обрабатывать как данные типа int. Если двухсимвольную константу попытаться присвоить переменной типа char, то произойдет потеря второго символа.

Двухсимвольную константу можно записать в виде "\ddC" или в виде "\xHHc", где С – символ алфавита отличный от восьмеричной цифры, с – символ, отличный от шестнадцатеричной цифры. Например, "\538" все равно что "+8", ибо компилятор воспринимает \53 как восьмеричный код символа +, за которым стоит символ 8. Аналогично "\x6DQ"воспринимается как "mQ", т.е. \x6D – шестнадцатеричный код символа m, за которым записан символ Q. Мы не советуем применять такие "хитроумные штучки", хотя Си предоставляет в этом плане широчайшие возможности.

Таблица символьного типа

Для работы с расширенным набором символов используется, таких как Unicode, тип wchar _ t (широкий символ, 16 бит в Windows, 32 ,бита в GNU/Linux , но может представляться и 8 битовым значением.

В стандарте С и С++ от 2011 года введены фиксированные символьные типы char16_t and char32_t для обеспечения недвусмысленного представления 16-битового и 32 битового преобразования Unicode форматов.

Константы

Константами называют неизменяемые величины. Различаются целые, вещественные, символьные и строковые константы. Компилятор, выделив константу в качестве лексемы, относит ее к одному из типов по ее внешнему виду.

Форматы констант, соответствующие каждому типу, приведены в табл. 7.1.

Таблица 7.1.

Константы в языке С++

Константа Формат Примеры
Целая Десятичный: последовательность десятичных цифр, начинающаяся не с нуля, если это не число нуль 8, 0, 199226
Восьмеричный: нуль, за которым следуют восьмеричные цифры (0,1,2,3,4,5,6,7) 01, 020, 07155
Шестнадцатеричный: Ох или ОХ, за которым следуют шестнадцатеричные цифры (0,1,2,3,4,5,6,7,8,9,А,В,С,D,Е,F) 0хА, 0x1 В8, 0Х00FF
Вещественная Десятичный: [цифры], [цифры] 5.7, .001, 35.
Экспоненциальный: [цифры][.][цифры]{Е|е}[+|-[цифры] 0.2Е6, .11е-3, 5Е10
Символьная Один или два символа, заключенных в апострофы "А", ‘ю’, "*", ‘db’ ‘\0’ ‘\n’, ‘\012’ "\x07\x07"
Строковая Последовательность символов, заключенная в кавычки "Здесь был Vasia", "\tЗначение r=\0хF5\"

Если требуется сформировать отрицательную целую или вещественную константу, то перед константой ставится знак унарной операции изменения знака (-), например: -218, -022, -0х3С, -4.8, -0.1е4.

Вещественная константа в экспоненциальном формате представляется в виде мантиссы и порядка. Мантисса записывается слева от знака экспоненты (Е или е), порядок – справа от знака. Значение константы определяется как произведение мантиссы и возведенного в указанную в порядке степень числа 10. Обратите внимание, что пробелы внутри числа не допускаются, а для отделения целой части от дробной используется не запятая, а точка.

Программист может задать тип константы самостоятельно. Могут быть опущены либо целая часть, либо дробная, но не обе сразу. Если указаны обе части, символ точки обязателен.

Символьные константы, состоящие из одного символа, занимают в памяти один байт и имеют стандартный тип char. Двухсимвольные константы занимают два байта и имеют тип int, при этом первый символ размещается в байте с меньшим адресом.

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

· кодов, не имеющих графического изображения (например,
\а – звуковой сигнал, \n – перевод курсора в начало следующей строки);

· символов апострофа ("), обратной косой черты (\), знака вопроса (?) и кавычки (");

· любого символа с помощью его шестнадцатеричного или восьмеричного кода, например, \073, \0xF5. Числовое значение должно находиться в диапазоне от 0 до 255.

Последовательности символов, начинающиеся с обратной косой черты, называют управляющими, или escape-последовательностями. В таблице 7.2. приведены их допустимые значения. Управляющая последовательность интерпретируется как одиночный символ. Если непосредственно за обратной косой чертой следует символ, не предусмотренный табл. 7.2, результат интерпретации не определен. Если в последовательности цифр встречается недопустимая, она считается концом цифрового кода.


Таблица 7.2.

Управляющие последовательности в языке С++

Управляющие последовательности могут использоваться и в строковых константах, называемых иначе строковыми литералами. Например, если внутри строки требуется записать кавычку, ее предваряют косой чертой, по которой компилятор отличает ее от кавычки, ограничивающей строку:

"Издательский дом \"Питер\""

Все строковые литералы рассматриваются компилятором как различные объекты.

Строковые константы, отделенные в программе только пробельными символами, при компиляции объединяются в одну. Длинную строковую константу можно разместить на нескольких строках, используя в качестве знака переноса обратную косую черту, за которой следует перевод строки. Эти символы игнорируются компилятором, при этом следующая строка воспринимается как продолжение предыдущей. Например, строка

Константы вещественного типа

Целочисленные константы

Константы в программах

Константы - объекты, не подлежащие использованию в левой части оператора присваивания, т.к. константа - является неадресуемой величиной и, хотя она хранится в памяти ЭВМ, обычно нет никакого способа узнать ее адрес. В языке Си константами являются:

Самоопределенные арифметические, символьные и строковые данные;

Идентификаторы массивов и функций;

Элементы перечислений.

Арифметические константы могут быть целого или вещественного типов.

Общий формат: ±n (+ обычно не ставится).

Десятичные константы - последовательность цифр 0...9, первая из которых не должна быть 0. Например, 22 и 273 - обычные целые константы, если нужно ввести длинную целую константу, то указывается признак L (l ) - 273L (273l ). Для такой константы будет отведено – 4 байта. Обычная целая константа, которая слишком длинна для типа int , рассматривается как более длинный тип (long или long long ).

Существует система обозначений для восьмеричных и шестнадца­те­­ри­чных констант.

Восьмеричные константы - последовательность цифр от 0 до 7, первая из которых должна быть 0, например: 020 = 16-десятичное.

Шестнадцатеричные константы - последовательность цифр от 0 до 9 и букв от A до F (a...f), начинающаяся символами 0Х (0х), например: 0X1F (0х1f) = 31-десятичное.

Восьмеричные и шестнадца­те­ричные константы могут также заканчиваться буквой L(l) - long, например, 020L или 0X20L.

Примеры целочисленных констант:

1992 13 1000L - десятичные;

0777 00033 01l - восьмеричные;

0x123 0X00ff 0xb8000l - шестнадцатеричные.

Данные константы размещаются в памяти по формату double, а во внешнем представлении могут иметь две формы:

1) с фиксированной десятичной точкой, формат записи: ±n .m , где n , m - целая и дробная части числа;

2) с плавающей десятичной точкой (экспоненциальная форма): ±n .m p , где n , m - целая и дробная части числа, р - порядок, например, 1,25×10 -8 записывается как 1.25E-8.

Примеры констант с фиксированной и плавающей точками:

1.0 -3.125100е-10 0.12537е+13

Символьная константа - это символ, заключенный в одинарные кавычки: "A", "х" (занимает 1 байт).

В языке Си используются и. специальные (управляющие ) символы, не отображаемые на экране; их назначение - влиять на порядок изображения других символов.. Поскольку они не отображаются на экране, для их обозначения в тексте программы используется пара символов, первый из которых всегда - обратная косая черта (обратный слеш ) ("\"). Основные их них:

С помощью обратного слеша в символьных и строковых (см. ниже) константах представляются и некоторые обычные символы, чье написание там могло бы привести к двусмысленности:

При присваивании символьной переменной эти последователь­ности должны быть заключены в апострофы. Символьная константа "\0" (не путать с символом - цифрой "0" !) часто записывается вместо целой константы 0, чтобы подчеркнуть символьную природу некоторого выражения (см. тему "Строки").

Примеры символьных констант: "А", "9", "$", "\n", "\"".

  • Сергей Савенков

    какой то “куцый” обзор… как будто спешили куда то