суббота, 28 сентября 2013 г.

Константы

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


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

Константа Формат Константа

Целая
Десятичный: последовательность десятичных цифр, начинающаяся не с нуля, если это не число нуль
Восьмеричный: нуль, за которым следуют восьмеричные цифры (0,1,2,3,4,5,6,7)
Шестнадцатеричный: 0х или 0Х, за которым следуют шестнадцатеричные цифры (0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F)
8, 0, 199226
01, 020, 07155
0хА, 0x1B8, 0X00FF

Вещественная

Десятичный:[цифры].[цифры]
Экспоненциальный: [цифры][.][цифры]{Е¦е}[+¦ -][цифры]

5.7,  .001,  35.0.2Е6,  .11е-З, 5Е10

Символьная

Один или два символа, заключенных в апострофы

‘А’, ‘ю’, ‘*’, ‘db’, ‘\0′, ‘\n’ , ‘\012′,  ’\x07\x07′

Строковая

Последовательность символов, заключенная в кавычки

«Здесь был Vasia»,»\t3начение r=\0xF5\n»

Не следует забывать, что у каждого типа данных есть диапазон допустимых значений.

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

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

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


Символ обратной косой черты используется для представления:
  • кодов, не имеющих графического изображения (например, \а — звуковой сигнал, \n — перевод курсора в начало следующей строки);
  • символов апострофа ( ‘ ) , обратной косой черты ( \ ), знака вопроса ( ? ) и кавычки ( ” );
  • любого символа с помощью его шестнадцатеричного или восьмеричного кода, например, \073, \0xF5. Числовое значение должно находиться в диапазоне от 0 до 255.
Последовательности символов, начинающиеся с обратной косой черты, называют управляющими, или escape-последовательностями.

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

Изображение    Шестнадцатеричный кодНаименование
\a7Звуковой сигнал
\b8Возврат на шаг
\fСПеревод страницы (формата)
\nАПеревод строки
\rDВозврат каретки
\t9Горизонтальная табуляция
\vВВертикальная табуляция
\\Обратная косая черта
\’27Апостроф
22Кавычка
\?3FВопросительный знак
\0dddВосьмеричный код символа
\0xddddddШестнадцатеричный код символа
Управляющие последовательности могут использоваться и в строковых константах, называемых иначе строковыми литералами. Например, если внутри строки требуется записать кавычку, ее предваряют косой чертой, по которой компилятор отличает ее от кавычки, ограничивающей строку:

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

Управляющие последовательности в основном используются для отображения символов, не имеющих графического изображения (перенос строки, табуляция и т.д.).

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

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

“Никто не доволен своей \
внешностью, но все довольны \
своим умом”

полностью эквивалентна строке

“Никто не доволен своей внешностью, но все довольны своим умом”

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

Поэтому длина строки всегда на единицу больше количества символов в ее записи. Таким образом, пустая строка "" имеет длину 1 байт. Обратите внимание на разницу между строкой из одного символа, например, «А», и символьной константой 'А'. Пустая символьная константа недопустима.