3.1.3. Символьные константы
3.1.3. Символьные константы
Символьная константа – это некоторый символ алфавита, заключенный в одиночные кавычки: '<символ_алфавита>' .
Примеры символьных констант: 'a' 'B' '=' '+' 'F' '[' 'd'.
Значением символьной константы является целое число, равное ASCII-коду (American Standard Code for Information Interchange, Американский стандартный код обмена информацией) данного символа. Символьная константа имеет тип int(char) и представляется 16(8)-битной величиной.
В таблице кодов ASCII (см. приложение) имеются коды, которые не отображаются при печати, а производят некоторые действия, например, перевод на новую строку (LF), подача звукового сигнала, гудка – BELL) и т. д. Для таких кодов на клавиатуре не предусмотрено отдельных клавиш, и при вводе с клавиатуры они набираются сочетанием определенных клавиш: например, нажатие клавиши Ctrl и G влечет за собой поступление в память кода "гудок", а при выводе символа, имеющего значение кода "гудок", компьютер подает звуковой сигнал.
Возникает вопрос: каким образом использовать подобные коды в программе? Для этого Си предоставляет два способа, имеющих непосредственное отношение к символьным константам.
Первый способ. Любой символ таблицы ASCII-кодов можно определить в виде символьной константы следующим образом:
'\ddd' или '\xHHH',
где ddd – восьмеричный, а HHH шестнадцатеричный код символа. Ведущие нули в представлении кода символа можно не записывать. Таким образом, в соответствии с этим вышеуказанные примеры символьных констант можно записать
символ |
'a' |
'B' |
'=' |
'+' |
'F' |
'[' |
'd' |
код |
'\141' |
'\102' |
'\75' |
'\53' |
'\106' |
'\133' |
'\144' |
код |
'\x61' |
'\x42' |
'\x3D' |
'\x2B' |
'\x46' |
'\x5B' |
'\x64' |
Символ, вызывающий подачу звукового сигнала, записывается в виде '\07', а символ, вызывающий перевод печати на новую строку – '\x0A'.
Второй способ заключается в том, что часто используемые неотображаемые символы не нужно записывать их кодами, а можно использовать для них зарезервированные обозначения. Эти символы в Си выделены в класс управляющих символов, представленных в таблице 3.3.
Таблица 3.3. Управляющие символы
Символ Си | Символ ASCII | Название символа |
\n' |
LF |
Новая строка |
'\t' |
HT |
Горизонтальная табуляция |
'\v' |
VT |
Вертикальная табуляция |
'\b' |
BS |
Шаг назад |
'\r' |
CR |
Возврат каретки |
'\f' |
FF |
Подача бланка |
\a' |
BEL |
Гудок |
'\'' |
' |
Одинарная кавычка |
'\"' |
" |
Двойная кавычка |
'\\' |
\ |
Обратная дробная черта |
'\?' |
? |
Вопрос |
Если управляющие символы встречаются, например, в строке вывода, то они вызывают соответствующее действие. Первые шесть управляющих символов являются символами управления работой печатающего устройства: символ "новая строка" переводит печать на начало следующей строки; символ "горизонтальная табуляция" продвигает печать в текущей строке в очередную фиксированную позицию строки. По умолчанию позиции в строке фиксируются через каждые 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. Мы не советуем применять такие "хитроумные штучки", хотя Си предоставляет в этом плане широчайшие возможности.
Таблица символьного типа
Тип и стандартная длина | Модифи-катор | Реакция компилятора длина |
char(1 байт) | signed unsined |
Первый бит рассматривается, как знаковый, остальные 7 определяют значение Наибольшее значение 127.Значение от 0 до 255. Гарантия непринятия отрицательного значения |
char16_t(2 байта) | Значение от 0 до 65538. | |
char32_t(4 байта) | Значение от 0 до 4294967295. |
Для работы с расширенным набором символов используется, таких как Unicode, тип wchar_t (широкий символ, 16 бит в Windows, 32 ,бита в GNU/Linux , но может представляться и 8 битовым значением.
В стандарте С и С++ от 2011 года введены фиксированные символьные типы char16_t and char32_t для обеспечения недвусмысленного представления 16-битового и 32 битового преобразования Unicode форматов.
Оставить комментарий