Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ТП лекции Раздел 4.doc
Скачиваний:
16
Добавлен:
28.09.2019
Размер:
2.56 Mб
Скачать

Константы

В отличие от переменной PERM (с описа­телем const) число 1.256Е6 представляет собой "настоящую" константу. Рассмот­рим примеры констант, допустимых в языке C++.

Объявление int i=10; j=010; k=0х10; инициализирует переменные (устанавли­вает их начальные значения) i, j и k числами 10, 8 и 16. Левый ноль (leading zero) в числе 010 сообщает компилятору, что целая константа записана в восьме­ричном виде. Аналогично символы 0х или ОХ в левых позициях константы означа­ют, что число записано в шестнадцатеричной форме. Константа 1234L использу­ет суффикс L для обозначения типа long. Суффиксы U,u,L,l, а также комбинации вида UL,LU,ul,lu,Lu,uL,... обозначают типы unsigned и long.

Например, присвоения FilePosition=45642ul; elements=8u: означают, что пере­менные теперь содержат целые положительные числа 45642 и 8 соответственно. Если стандартный тип какой-то переменной не соответству­ет типу присваиваемой константы, то компилятор автоматически произведет пре­образование по правилам, приведенным выше. Большое разнообразие допусти­мо при записи вещественных констант, например:

double a=.0, b=0., c=1e6, d=.009E34, е=6.78, f=2e-6;

При отсутствии суффиксов все константы имеют тип double. Если константе надо задать другой вещественный тип, то следует использовать суффиксы: f,F,l,L. Например, константа 69E7f имеет тип float, а константа 54.27E3L - long double. Число бит, отводимое в Visual C++ для констант и переменных вещественных типов, и диапазон значений абсолютных величин соответствующих типов таковы:

float 32 бита 3.4*10ехр(-38), 3.4*10ехр(+38) double 64 бита 1.7*10ехр(-308). 1.7*10ехр(+308) long double 80 бит 1.2*10ехр(-4932). 1.2*10ехр{+4932)

Символьные константы также имеют весьма разнообразный вид. Например, объявление char ch='A'; определяет и одновременно инициализирует перемен­ную ch значением <символ А>. Оператор ch='\007'; присваивает переменной значение символа, восьмеричный код которого есть 007 (звуковой сигнал). Сим­вол \ используется для задания символов типа escape sequence (последователь­ности), которые позволяют визуально представить непечатаемые символы ASCII таблицы (American Standard Code for Information Interchange). Например: '\n' (возврат каретки — перевод строки), '\r' (возврат каретки), '\t' (горизонталь­ная табуляция), '\v' (вертикальная табуляция), '\b' (шаг назад (backspace)), '\f '(начало страницы (formfeed)), '\\' (символ \). За символом \ может также следовать шестнадцатеричный или восьмеричный (теперь не обязательно трех-символьный) ASCII-код, например, '\03' для Ctrl+C или '\х40' для символа '@' (несмотря на то, что он печатаемый). Если вывести на экран строку символов "\n'\х40'=\х40", то она будет выведена с новой строки и выглядеть так: '@'=@. Небольшое изменение "\n'\\х40'=\х40" преобразует вывод к виду '\х40'=@. При задании шестнадцатеричного кода символа не допускается наличие ведущего нуля.

Описатель wchar_t в языке C++ определяет тип «расширенный символ» (wide character type). Константа или переменная этого типа занимает 2 байта, a wchar_t — его ключевое слово. Символьная константа типа wchar_t обозначается предшествующим символом L (префиксом). Например, wchar_t c=L'AX'; определяет переменную с типа, два байта которой инициализированы символами А и X. В 32-битном компи­ляторе C++ поддерживаются максимум 4-байтные символьные константы (multicharacter constants). Например, возможна декларация вида: int i='An\n\t'. j='\007br\n':

Строка символов в языках С и C++ определяется как массив символов, последним элементом которого является символ '\0' (то есть с кодом 0). Не путайте с символом '0', код которого 48 или З0Н. Объявление char s[]="string"; задает строку (массив) символов. Здесь инициализатором строки является стро­ковая константа (literal), заключенная между символами "" (двойные кавычки). Литерал всегда имеет тип static массив переменных типа char. Среди своих символов, то есть внутри строки, литерал может содержать символы типа escape-noследовательности. Например, "\n\tEfforts\t\tResults". Пустая строка "" (null string), тем не менее, содержит один символ '\0' (null character). Группа символов носит название пустые символы (whitespace), если и нее входят только пробелы, табуляции и новые строки. Литералы, разделенные только пустыми символами, автоматически склеиваются (concatenated) компилятором во время синтаксиче­ского анализа (parsing). Примеры склеивания строк будут часто встречаться далее в операторах вывода. Если смысл приводимых терминов вам не вполне ясен, это не должно вас останавливать, так как по мере движения вперед (выполнения и отладки примерок) он постепенно прояснится.