Char какой тип данных

Microsoft C++ 32-разрядных и 64-разрядные компиляторы распознает типы в таблице ниже в этой статье. The Microsoft C++ 32-bit and 64-bit compilers recognize the types in the table later in this article.

int ( unsigned int ) int ( unsigned int )

__int8 ( unsigned __int8 ) __int8 ( unsigned __int8 )

__int16 ( unsigned __int16 ) __int16 ( unsigned __int16 )

__int32 ( unsigned __int32 ) __int32 ( unsigned __int32 )

__int64 ( unsigned __int64 ) __int64 ( unsigned __int64 )

short ( unsigned short ) short ( unsigned short )

long ( unsigned long ) long ( unsigned long )

long long ( unsigned long long ) long long ( unsigned long long )

Если имя начинается с двух символов подчеркивания ( __ ), тип данных является нестандартным. If its name begins with two underscores ( __ ), a data type is non-standard.

Диапазоны, представленные в следующей таблице, включают указанные значения. The ranges that are specified in the following table are inclusive-inclusive.

Имя типа Type Name Байты Bytes Другие имена Other Names Диапазон значений Range of Values
int int 4 4 signed signed От -2 147 483 648 до 2 147 483 647 -2,147,483,648 to 2,147,483,647
unsigned int unsigned int 4 4 unsigned unsigned От 0 до 4 294 967 295 0 to 4,294,967,295
__int8 __int8 1 1 char char От -128 до 127 -128 to 127
__int8 без знака unsigned __int8 1 1 unsigned char unsigned char От 0 до 255 0 to 255
__int16 __int16 2 2 короткий, короткое целочисленное, короткое целочисленное число со знаком short, short int, signed short int От -32 768 до 32 767 -32,768 to 32,767
unsigned __int16 unsigned __int16 2 2 unsigned short, короткое целое число unsigned short, unsigned short int От 0 до 65 535 0 to 65,535
__int32 __int32 4 4 автоматический, целочисленное число со знаком, int signed, signed int, int От -2 147 483 648 до 2 147 483 647 -2,147,483,648 to 2,147,483,647
unsigned __int32 unsigned __int32 4 4 без знака, типа int без знака unsigned, unsigned int От 0 до 4 294 967 295 0 to 4,294,967,295
__int64 __int64 8 8 Long long, со знаком длинное длинное long long, signed long long От -9 223 372 036 854 775 808 до 9 223 372 036 854 775 807 -9,223,372,036,854,775,808 to 9,223,372,036,854,775,807
unsigned __int64 unsigned __int64 8 8 long long без знака unsigned long long От 0 до 18 446 744 073 709 551 615 0 to 18,446,744,073,709,551,615
bool bool 1 1 Нет none false или true false or true
char char 1 1 Нет none -128 до 127 знаков по умолчанию -128 to 127 by default

При компиляции при помощи /J— от 0 до 255 0 to 255 when compiled by using /J

char со знаком signed char 1 1 Нет none От -128 до 127 -128 to 127 unsigned char unsigned char 1 1 Нет none От 0 до 255 0 to 255 short short 2 2 короткое целочисленное, короткое целочисленное число со знаком short int, signed short int От -32 768 до 32 767 -32,768 to 32,767 unsigned short unsigned short 2 2 unsigned short int unsigned short int От 0 до 65 535 0 to 65,535 long long 4 4 Long int, длинное целочисленное число со знаком long int, signed long int От -2 147 483 648 до 2 147 483 647 -2,147,483,648 to 2,147,483,647 unsigned long unsigned long 4 4 unsigned long int unsigned long int От 0 до 4 294 967 295 0 to 4,294,967,295 long long long long 8 8 Нет (но эквивалентно __int64) none (but equivalent to __int64) От -9 223 372 036 854 775 808 до 9 223 372 036 854 775 807 -9,223,372,036,854,775,808 to 9,223,372,036,854,775,807 long long без знака unsigned long long 8 8 Нет (но эквивалентно unsigned __int64) none (but equivalent to unsigned __int64) От 0 до 18 446 744 073 709 551 615 0 to 18,446,744,073,709,551,615 enum enum Возможны разные варианты varies Нет none float float 4 4 Нет none 3,4E +/- 38 (7 знаков) 3.4E +/- 38 (7 digits) double double 8 8 Нет none 1,7E +/- 308 (15 знаков) 1.7E +/- 308 (15 digits) long double long double Совпадение с кодом double same as double Нет none Совпадение с кодом double Same as double wchar_t wchar_t 2 2 __wchar_t __wchar_t От 0 до 65 535 0 to 65,535

Зависимости от того, как она используется, переменная __wchar_t обозначает расширенный символьный или Многобайтовый символьный тип. Depending on how it’s used, a variable of __wchar_t designates either a wide-character type or multibyte-character type. Чтобы указать константу расширенного символьного типа, перед символьной или строковой константой следует использовать префикс L . Use the L prefix before a character or string constant to designate the wide-character-type constant.

автоматический и без знака называются модификаторы, которые можно использовать с любым целочисленным типом за исключением bool. signed and unsigned are modifiers that you can use with any integral type except bool. Обратите внимание, что char, автоматический char, и unsigned char являются три различных типа для механизмов, подобных перегрузке и шаблонам. Note that char, signed char, and unsigned char are three distinct types for the purposes of mechanisms like overloading and templates.

Int и unsigned int типы имеют размер 4 байта. The int and unsigned int types have a size of four bytes. Однако переносимый код не должно влиять на размер int так, как языковой стандарт позволяет это может быть от реализации. However, portable code should not depend on the size of int because the language standard allows this to be implementation-specific.

C и C++ в Visual Studio также поддерживают целочисленные типы с указанием размера. C/C++ in Visual Studio also supports sized integer types. Дополнительные сведения см. в разделах __int8, __int16, __int32, __int64 и Пределы целых чисел. For more information, see __int8, __int16, __int32, __int64 and Integer Limits.

Дополнительные сведения об ограничениях, связанных с размером, каждого типа см. в статье Фундаментальные типы. For more information about the restrictions of the sizes of each type, see Fundamental Types.

Диапазон перечисляемых типов зависит от контекста языка и указанных флажков компилятора. The range of enumerated types varies depending on the language context and specified compiler flags. Дополнительные сведения см. в статьях Объявления перечислений C и Объявления перечислений C++. For more information, see C Enumeration Declarations and Enumerations.

Все о коде и не только

  • Получить ссылку
  • Facebook
  • Twitter
  • Pinterest
  • Электронная почта
  • Другие приложения

Типы данных в C++

Составные типы

Символьный тип

Данные типа char в памяти компьютера всегда занимают 1 байт. Это связа­но с тем, что обычно под величину символьного типа отводят столько памяти, сколько необходимо для хранения любого из 256 символов клавиатуры.
Сим­вольный тип может быть со знаком или без знака.
В величинах со знаком signed char можно хранить значения в диапазоне от -128 до 127. Соответствен­но значения переменных типа unsigned char могут находиться в диапазоне от 0 до 255.

Обновл. 31 Мар 2019 |

Хоть тип char и относится к целочисленным типам данных (и, таким образом, следует всем их правилам), работа с char несколько отличается, чем с обычными целочисленными типами.

Тип данных char

Переменная типа char занимает 1 байт. Однако, вместо конвертации значения типа char в целое число, оно интерпретируется как символ ASCII.

ASCII (от англ. «American standard code for information interchange») — американский стандартный код для обмена информацией, который определяет способ представления символов английского языка (+ несколько других) в виде чисел от 0 до 127. Например: код буквы ‘а’ — 97, код буквы ‘b’ — 98. Символы всегда помещаются в одинарные кавычки.

Таблица символов ASCII:

Код Символ Код Символ Код Символ Код Символ
0 NUL (null) 32 (space) 64 @ 96 `
1 SOH (start of header) 33 ! 65 A 97 a
2 STX (start of text) 34 66 B 98 b
3 ETX (end of text) 35 # 67 C 99 c
4 EOT (end of transmission) 36 $ 68 D 100 d
5 ENQ (enquiry) 37 % 69 E 101 e
6 ACK (acknowledge) 38 & 70 F 102 f
7 BEL (bell) 39 71 G 103 g
8 BS (backspace) 40 ( 72 H 104 h
9 HT (horizontal tab) 41 ) 73 I 105 i
10 LF (line feed/new line) 42 * 74 J 106 j
11 VT (vertical tab) 43 + 75 K 107 k
12 FF (form feed / new page) 44 , 76 L 108 l
13 CR (carriage return) 45 77 M 109 m
14 SO (shift out) 46 . 78 N 110 n
15 SI (shift in) 47 / 79 O 111 o
16 DLE (data link escape) 48 0 80 P 112 p
17 DC1 (data control 1) 49 1 81 Q 113 q
18 DC2 (data control 2) 50 2 82 R 114 r
19 DC3 (data control 3) 51 3 83 S 115 s
20 DC4 (data control 4) 52 4 84 T 116 t
21 NAK (negative acknowledge) 53 5 85 U 117 u
22 SYN (synchronous idle) 54 6 86 V 118 v
23 ETB (end of transmission block) 55 7 87 W 119 w
24 CAN (cancel) 56 8 88 X 120 x
25 EM (end of medium) 57 9 89 Y 121 y
26 SUB (substitute) 58 : 90 Z 122 z
27 ESC (escape) 59 ; 91 [ 123 <
28 FS (file separator) 60 94 ^ 126
31 US (unit separator) 63 ? 95 _ 127 DEL (delete)

Символы от 0 до 31 в основном используются для форматирования вывода. Большинство из них уже устарели.

Символы от 32 до 127 используются для вывода. Это буквы, цифры, знаки препинания, которые большинство компьютеров использует для отображения текста (на английском языке).

Следующие два стейтмента выполняют одно и то же (присваивают переменным типа char целое число 97):

Будьте внимательны при использовании фактических чисел с числами, которые используются для представления символов (с таблицы ASCII). Следующие два стейтмента выполняют не одно и то же:

Вывод символов

При выводе переменных типа char, объект cout выводит символы вместо цифр:

Также вы можете выводить литералы типа char напрямую:

Оператор static_cast

Если вы хотите вывести символы в виде цифр, а не в виде букв, то вам нужно сообщить cout выводить переменные типа char в виде целочисленных значений. Не очень хороший способ это сделать — присвоить переменной типа int переменную типа char и вывести её:

Лучшим способом является конвертация переменной из одного типа данных в другой с помощью оператора static_cast.

Синтаксис static_cast выглядит следующим образом:

static_cast принимает значение из (выражения) в качестве входных данных и конвертирует его в указанный вами .

Пример использования оператора static_cast для конвертации типа char в тип int:

Результат выполнения программы выше:

Запомните, static_cast принимает (выражение) в качестве входных данных. Если мы используем переменную в (выражении) , то эта переменная изменяет свой тип только в стейтменте с оператором static_cast. Процесс конвертации никак не влияет на исходную переменную с её значением! В примере выше, переменная ch остаётся переменной типа char с прежним значением, чему является подтверждением последний стейтмент с cout.

Также в static_cast нет никакой проверки по диапазону, так что если вы попытаетесь использовать числа, которые слишком большие или слишком маленькие для конвертируемого типа, то произойдёт переполнение.

Более подробно о static_cast мы ещё поговорим в соответствующем уроке.

Ввод символов

Следующая программа просит пользователя ввести символ. Затем она выводит этот символ и его ASCII код:

Результат выполнения программы выше:

Input a keyboard character: q
q has ASCII code 113

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

Рассмотрим это всё на практике:

Результат выполнения программы выше:

Input a keyboard character: abcd
a has ASCII code 97
b has ASCII code 98

Размер, диапазон и знак типа сhar

В С++ для переменных типа char всегда выделяется 1 байт. По умолчанию, char может быть как signed, так и unsigned (хотя обычно signed). Если вы используете char для хранения ASCII символов, то вам не нужно указывать знак переменной (так как и signed, и unsigned могут содержать значения от 0 до 127).

Но если вы используете тип char для хранения небольших целых чисел, то тогда следует уточнить знак. Переменная типа char signed может хранить числа от -128 до 127. Переменная типа char unsigned имеет диапазон от 0 до 255.

Управляющие символы

В C++ есть управляющие символы (или ещё «escape-последовательность»). Они начинаются с бэкслэша (‘‘), а затем определённой буквы или цифры.

Наиболее распространённым управляющим символов в С++ является ‘
‘ , который обозначает символ новой строки:

First line
Second line

Ещё одним часто используемым управляющим символом является ‘ ‘ , который заменяет клавишу TAB, вставляя большой отступ:

First part Second part

Таблица всех управляющих символов в C++:

Название Символ Значение
alert a Предупреждение (звуковой сигнал)
backspace  Перемещение курсора на одну позицию назад
formfeed f Перемещение курсора к следующей логической странице
newline Перемещение курсора на следующую строку
carriage return Перемещение курсора в начало строки
horizontal tab Вставка горизонтального TAB-а
vertical tab v Вставка вертикального TAB-а
single quote Вставка одинарной кавычки (или апострофа)
double quote Вставка двойной кавычки
backslash \ Вставка обратной косой черты (бэкслэша)
question mark ? Вставка знака вопроса
octal number (number) Перевод числа из восьмеричной системы счисления в тип char
hex number x(number) Перевод числа из шестнадцатеричной системы счисления в тип char

Рассмотрим пример в коде:

Результат выполнения программы выше:

"This is quoted text"
This string contains a single backslash
6F in hex is char ‘o’

Что использовать: ‘
’ или std::endl?

Вы могли заметить, что в последнем примере мы использовали ‘
‘ для перемещения курсора на следующую строку. Но мы могли бы использовать и std::endl . Какая между ними разница? Сейчас разберёмся.

При использовании std::cout данные для вывода могут помещаться в буфер, т.е. std::cout может не отправлять данные сразу же на вывод. Вместо этого он может оставить их при себе на некоторое время. Это делается исходя из соображений производительности.

И ‘
‘ , и std::endl оба переносят курсор на следующую строку. Только std::endl ещё гарантирует, что все данные из буфера будут выведены, перед тем, как продолжить.

Так когда же использовать ‘
‘ , а когда std::endl ?

Используйте std::endl , когда нужно, чтобы ваши данные выводились сразу же (например: при записи в файл или при обновлении индикатора состояния какого-либо процесса). Обратите внимание, это может повлечь за собой незначительное снижение производительности, особенно если запись на устройство происходит медленно (например, запись файла на диск).

Используйте ‘
‘ во всех остальных случаях.

Другие символьные типы: wchar_t, char16_t и char32_t

wchar_t следует избегать практически во всех случаях (кроме тех, когда происходит взаимодействие с Windows API).

Так же, как и стандарт ASCII использует целые числа для представления символов английского языка, так и другие кодировки используют целые числа для представления символов других языков. Наиболее известный стандарт (после ASCII) — Unicode, который имеет в запасе более 110 000 целых чисел для представления символов из разных языков. Есть следующие кодировки Unicode:

UTF-32: требует 32 бита для представления символа.

UTF-16: требует 16 бит для представления символа.

UTF-8: требует 8 бит для представления символа.

char16_t и char32_t были добавлены в C++11 для поддержки 16-битных и 32-битных символов Unicode (8-битные символы и так поддерживаются типом char).

В чём разница между одинарными и двойными кавычками при использовании с символами?

Как вы уже знаете, символы всегда помещаются в одинарные кавычки (например: ‘а’ , ‘+’ , ‘5’ ). Переменная типа char представляет только один символ (например: букву а , символ + , число 5 ). Что-то вроде следующего не является корректным:

Текст, который находится в двойных кавычках, называется строкой (например, “Hello, world!”). Строка (тип string) — это набор последовательных символов.

Вы можете использовать литералы типа string в коде:

Более подробно о string мы поговорим в соответствующем уроке.

За репост +20 к карме и моя благодарность!


[an error occurred while processing the directive]
Карта сайта