Язык программирования C++

         

Символы и байты


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

Итак, для записи знаков в языке Си++ служат типы char и unsigned char . Первый – это целое число со знаком, хранящееся в одном байте, второй – беззнаковое байтовое число. Эти типы чаще всего используются для манипулирования символами, поскольку коды символов как раз помещаются в байт.

Пояснение. Единственное, что может хранить компьютер, это числа. Поэтому для того чтобы можно было хранить символы и манипулировать ими, символам присвоены коды – целые числа. Существует несколько стандартов, определяющих, какие коды каким символам соответствуют. Для английского алфавита и знаков препинания используется стандарт ASCII. Этот стандарт определяет коды от 0 до 127. Для представления русских букв используется стандарт КОИ-8 или CP-1251. В этих стандартах русские буквы кодируются числами от 128 до 255. Таким образом, все символы могут быть представлены в одном байте (максимальное число символов в одном байте – 255). Для работы с китайским, японским, корейским и рядом других алфавитов одного байта недостаточно, и используется кодировка с помощью двух байтов и, соответственно, тип wchar_t (подробнее см. ниже).

Чтобы объявить переменную байтового типа, нужно записать:

char c; // байтовое число со знаком

unsigned char u; // байтовое число без знака

Поскольку байты – это целые числа, то все операции с целыми числами применимы и к байтам. Стандартная запись целочисленных констант тоже применима к байтам, т.е. можно записать:

c = 45;

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

'S' '' '8' 'ф'

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

В кодировке ASCII два следующих оператора эквивалентны:

char c = 68; char c = 'D';


Первый из них присваивает байтовой переменной c значение числа 68. Второй присваивает этой переменной код латинской буквы D, который в кодировке ASCII равен 68.

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

\a звонок \b возврат на один символ назад \f перевод страницы \n новая строка \r перевод каретки \t горизонтальная табуляция \v вертикальная табуляция \' апостроф \" двойные кавычки \\ обратная дробная черта \? вопросительный знак

Для того чтобы записать произвольное байтовое значение, также используется экранированная последовательность: после обратной дробной черты записывается целое число от 0 до 255.

char zero = '\0'; const unsigned char bitmask = '\0xFF'; char tab = '\010';

Следующая программа выведет все печатные символы ASCII и их коды в порядке увеличения:

for (char c = 32; c 127; c++) cout c " " (int)c " ";

Однако напомним еще раз, что байтовые величины – это, прежде всего, целые числа, поэтому вполне допустимы выражения вида

'F' + 1 'a' 23

и тому подобные. Тип char был придуман для языка Си, от которого Си++ достались все базовые типы данных. Язык Си предназначался для программирования на достаточно "низком" уровне, приближенном к тому, как работает процессор ЭВМ, именно поэтому символ в нем – это лишь число.

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


Содержание раздела