Тип задаётся набором допустимых значений и действий, которые можно производить над данными этого типа. Типы данных языка C схематически представлены на рисунке 1.
Рис. 1
Базовые типы данных языка C.
Тип char – символьный тип, хранит код символа. Любой символ в компьютере, который можно ввести с клавиатуры, вывести на монитор, имеет соответствующий ему код. Эти коды представлены в таблицах кодировок ASCII, ГОСТ и других, в зависимости от используемой компьютером кодировки. Преобразование символа в код и наоборот производится компьютером автоматически.
Тип int – целочисленный тип, хранит значение целого числа.
Тип float – вещественный тип, хранит значение числа с плавающей точкой.
Тип double – вещественный тип двойной длины, хранит значение числа с плавающей точкой.
Типы char, int, float, double является знаковыми, то есть переменная данного типа может принимать положительные и отрицательные значения.
Тип void – пустой тип, не имеющий значения.
Для модификации диапазонов принимаемых данными типами значений возможно использование модификаторов типа, которые ставятся перед соответствующим типом.
Модификатор signed – знаковый тип, хранит значения как положительные, так и отрицательные.
Модификатор unsigned – беззнаковый тип, хранит только неотрицательные значения.
Модификатор short – короткий тип, хранит укороченные значения.
Модификатор long – длинный тип, хранит удлинённые значения.
Модификаторы signed и unsigned могут применяться к типам char и int. Модификаторы short и long могут применяться к типу int. Модификатор long может также применяться к типу double. Модификаторы signed и unsigned могут комбинироваться с модификаторами short и long в применении к типу int.
В следующей таблице приведены все возможные типы с различными комбинациями модификаторов для стандарта ANSI языка C, их размеры в байтах и интервалы изменения.
Тип
| Размер в байтах (битах)
| Интервал изменения
|
char
| 1(8)
| от -128
| до 127
|
unsigned char
| 1(8)
| от 0
| до 255
|
signed char
| 1(8)
| от -128
| до 127
|
int
| 2(16)
| от -32768
| до 32767
|
unsigned int
| 2(16)
| от 0
| до 65535
|
signed int
| 2(16)
| от -32768
| до 32767
|
short int
| 2(16)
| от -32768
| до 32767
|
unsigned short int
| 2(16)
| от 0
| до 65535
|
signed short int
| 2(16)
| от -32768
| до 32767
|
long int
| 4(32)
| от -2147483648
| до 2147483647
|
signed long int
| 4(32)
| от -2147483648
| до 2147483647
|
unsigned long int
| 4(32)
| от 0
| до 4294967295
|
float
| 4(32)
| от -3.4E+38
| до -3.4E-38
|
|
| от 3.4E-38
| до 3.4E+38
|
double
| 8(64)
| от -1.7E+308
| до -1.7E-308
|
|
| от 1.7E-308
| до 1.7E+308
|
long double
| 10(80)
| от -3.4E+4932
| до -3.4E-4932
|
|
| от 3.4E-4932
| до 3.4E+4932
|
В среде Borland C++ 3.1 можно в объявлениях переменных опускать слово int (например, short вместо short int, unsigned short вместо unsigned short int).
Все числа в памяти ЭВМ хранятся в двоичной системе счисления, но для программиста они доступны в десятичной системе счисления.
Различие между целыми числами со знаком и целыми числами без знака состоит в том, как интерпретируется старший бит целого числа в машинном представлении. Старший бит для целого знакового числа определяет знак числа. Если старший бит равен нулю, то число положительное, если единице, то число отрицательное. Отрицательные числа хранятся в обратном коде. Старший бит для целого беззнакового числа является обычным численным разрядом.