За исключением типа void, основные типы данных могут иметь различные модификаторы. Модификаторы используются для более точного управления ситуацией. Ниже приведен список модификаторов:
signed
unsigned
short
Модификаторы signed, unsigned, long и short могут применяться к целочисленным типам. К символам можно применять signed и unsigned, long может применяться к типу double. Таблица показывает все допустимые комбинации стандарта ANSI С для 16-битных типов данных вместе с размером типа в битах и границами применения в Borland С++.
Тип | Длина в битах | Диапазон |
---|---|---|
char | 8 | от-128 до 127 |
unsigned char | 8 | от 0 до 255 |
signed char | 8 | от-128 до 127 |
int | 16 | от-32768 до 32767 |
unsigned int | 16 | от 0 до 65535 |
signed int | 16 | от -32768 до 32767 |
short int | 16 | от -32768 до 32767 |
unsigned short int | 16 | от 0 до 65535 |
signed short int | 16 | от -32768 до 32767 |
long int | 32 | от -2147483648 до 2147483647 |
unsigned long int | 32 | от 0 до 4294967295 |
signed long int. | 32 | от -2147483648 до 2147483647 |
float | 32 | от 3.4е-38 до 3.4е+38 |
double | 64 | от 1.7е-308 до 1.7e+308 |
long double | 80 | от 3.4е-4932 до 1.1e+4932 |
Таблица содержит информацию о 32-битных типах данных.
Тип | Длина в битах | Диапазон от-128 до 127 |
---|---|---|
char | 8 | от 128 до 127 |
unsigned char | 8 | от 0 до 255 |
signed char | 8 | от -128 до 127 |
int | 32 | от -2147483648 до 2147483647 |
unsigned int | 32 | от 0 до 4294967295 |
signed int | 32 | от -2147483648 до 2147483647 |
short int | 16 | от -32768 до 32767 |
unsigned short int | 16 | от 0 до 65535 |
signed short int | 16 | от -32768 до 32767 |
long int | 32 | от -2147483648 до 2147483647 |
unsigned long int | 32 | от 0 до 4294967295 |
signed long int | 32 | от -2147483648 до 2147483647 |
float | 32 | от 3.4e-38 до 3.4е+38 |
double | 64 | от 1.7е-308 до 1.7е+308 |
long double | 80 | от 3.4е-4932 до 1.1e+4932 |
Использование signed для целочисленных типов является избыточным (но допустимым), поскольку объявление целочисленных типов по умолчанию предполагает знаковое число.
Различие между знаковыми и беззнаковыми целочисленными типами заключается в способе интерпретации старшего бита. Если используется знаковый тип, то компилятор генерирует код, предполагающий, что старший бит используется как знак числа. Если знаковый бит равен 0, то число положительное, а если 1 - отрицательное. Ниже приведены простые примеры:
Следует предупредить, что фактически все компьютеры используют дополнительную арифметику, что приводит к представлению —127 в виде, слегка отличном от вышеприведенного примера. Тем не менее, использование знакового бита является однотипным. У отрицательного числа в дополнительном виде все биты инвертированы, и к числу добавляется 1. Например, —127 в дополнительном виде выглядит следующим образом:
1111111110000001
Знаковые числа важны для многих алгоритмов, но они могут вмещать только половину значений, которые могут содержать их беззнаковые «братья». Например, 32767 выглядит следующим образом:
01111111 11111111
Если старший бит установлен в 1, то число будет интерпретироваться как —1. Тем не менее, если объявить его как unsigned int, то, если старший бит установлен, число будет содержать 65535.