Содержание
Тип данных определяет множество значений, набор операций, которые можно применять к таким значениям и способ реализации хранения значений и выполнения операций.
Процесс проверки и накладывания ограничений на типы используемых данных называется контролем типов или типизацией программных данных . Различают следующие виды типизации:
- Статическая типизация — контроль типов осуществляется при компиляции.
- Динамическая типизация — контроль типов осуществляется во время выполнения.
Язык Си поддерживает статическую типизацию, и типы всех используемых в программе данных должны быть указаны перед ее компиляцией.
Различают простые, составные и прочие типы данных.
Простые данные
Простые данные можно разделить на
- целочисленные,
- вещественные,
- символьные
- логические.
Составные (сложные) данные
- Массив — индексированный набор элементов одного типа.
- Строковый тип — массив, хранящий строку символов.
- Структура — набор различных элементов (полей записи), хранимый как единое целое и предусматривающий доступ к отдельным полям структуры.
Другие типы данных
- Указатель — хранит адрес в памяти компьютера, указывающий на какую-либо информацию, как правило — указатель на переменную.
Программа, написанная на языке Си, оперирует с данными различных типов. Все данные имеют имя и тип. Обращение к данным в программе осуществляется по их именам (идентификаторам).
Идентификатор — это последовательность, содержащая не более 32 символов, среди которых могут быть любые буквы латинского алфавита a — z, A — Z, цифры 0 — 9 и знак подчеркивания (_). Первый символ идентификатора не должен быть цифрой.
Несмотря на то, что допускается имя, имеющее до 32 символов, определяющее значение имеют только первые 8 символов. Помимо имени, все данные имеют тип. Указание типа необходимо для того, чтобы было известно, сколько места в оперативной памяти будет занимать данный объект.
Компилятор языка Си придерживается строгого соответствия прописных и строчных букв в именах идентификаторов и лексем.
Верно | Неверно |
int a = 2, b; b = a+3; |
INT a=2;
b = A + 3; // идентификатор А не объявлен
b = a + 3; // идентификатор b не объявлен
Целочисленные данные
Целочисленные данные могут быть представлены в знаковой и беззнаковой форме.
Беззнаковые целые числа представляются в виде последовательности битов в диапазоне от 0 до 2 n -1, где n-количество занимаемых битов.
Знаковые целые числа представляются в диапазоне -2 n-1 …+2 n-1 -1. При этом старший бит данного отводится под знак числа (0 соответствует положительному числу, 1 – отрицательному).
Основные типы и размеры целочисленных данных:
Количество бит | Беззнаковый тип | Знаковый тип |
8 | unsigned char 0…255 |
char -128…127 |
16 | unsigned short 0…65535 |
short -32768…32767 |
32 | unsigned int | int |
64 | unsigned long int | long int |
Вещественные данные
Вещественный тип предназначен для представления действительных чисел. Вещественные числа представляются в разрядной сетке машины в нормированной форме.
Нормированная форма числа предполагает наличие одной значащей цифры (не 0) до разделения целой и дробной части. Такое представление умножается на основание системы счисления в соответствующей степени. Например, число 12345,678 в нормированной форме можно представить как
12345,678 = 1,2345678·10 4
Число 0,009876 в нормированной форме можно представить как
0,009876 = 9,876·10 -3
В двоичной системе счисления значащий разряд, стоящий перед разделителем целой и дробной части, может быть равен только 1. В случае если число нельзя представить в нормированной форме (например, число 0), значащий разряд перед разделителем целой и дробной части равен 0.
Значащие разряды числа, стоящие в нормированной форме после разделителя целой и дробной части, называются мантиссой числа .
В общем случае вещественное число в разрядной сетке вычислительной машины можно представить в виде 4 полей.
- знак — бит, определяющий знак вещественного числа (0 для положительных чисел, 1 — для отрицательных).
- степень — определяет степень 2, на которую требуется умножить число в нормированной форме. Поскольку степень 2 для числа в нормированной форме может быть как положительной, так и отрицательной, нулевой степени 2 в представлении вещественного числа соответствует величина сдвига, которая определяется как
2 n -1,
где n — количество разрядов, отводимых для представления степени числа.
Различают три основных типа представления вещественных чисел в языке Си:
Тип | Обозна- чение в Си |
Кол-во бит | Биты степени | Мантисса | Сдвиг |
простое | float | 32 | 30…23 | 22…0 | 127 |
двойной точности | double | 64 | 62…52 | 51…0 | 1023 |
двойной расширен- ной точности | long double | 80 | 78…64 | 62…0 | 16383 |
Как видно из таблицы, бит целое у типов float и double отсутствует. При этом диапазон представления вещественного числа состоит из двух диапазонов, расположенных симметрично относительно нуля. Например, диапазон представления чисел типа float можно представить в виде:
Пример : представить число -178,125 в 32-разрядной сетке (тип float ).
Для представления числа в двоичной системе счисления преобразуем отдельно целую и дробную части:
178,12510 = 10110010,0012=1,0110010001·2 111
Для преобразования в нормированную форму осуществляется сдвиг на 7 разрядов влево).
Для определения степени числа применяем сдвиг:
0111111+00000111 = 10000110.
Таким образом, число -178,125 представится в разрядной сетке как
Символьный тип
Символьный тип хранит код символа и используется для отображения символов в различных кодировках. Символьные данные задаются в кодах и по сути представляют собой целочисленные значения. Для хранения кодов символов в языке Си используется тип 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
Зависимости от того, как она используется, переменная __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.
Все о коде и не только
- Получить ссылку
- Электронная почта
- Другие приложения
Типы данных в C++
Составные типы
Символьный тип
Данные типа char в памяти компьютера всегда занимают 1 байт. Это связано с тем, что обычно под величину символьного типа отводят столько памяти, сколько необходимо для хранения любого из 256 символов клавиатуры.
Символьный тип может быть со знаком или без знака.
В величинах со знаком signed char можно хранить значения в диапазоне от -128 до 127. Соответственно значения переменных типа unsigned char могут находиться в диапазоне от 0 до 255.