Встроенные типы данных
Однако данные могут не только вписываться в текст программы, но и храниться в памяти во время ее выполнения. С физической точки зрения любая информация в памяти машины выглядит одинаково — это просто последовательности нулей и единиц, сгруппированных в байты. Поэтому наличные в памяти данные должны как-то интерпретироваться процессором; этой интерпретацией управляет, естественно, компилятор С. Любая информация рассматривается компилятором как принадлежащая к некоторому типу данных. В языке имеется несколько встроенных, или простых, типов (возможны и другие типы данных, например, определяемые пользователем). Простые типы перечислены в следующей таблице.
Таблица 3.2. Встроенные типы данных
Тип данных |
Размер (бит) |
Диапазон |
|||
char | 8 | -128 - 127 | |||
signed char | 8 | -128 - 127 | |||
unsigned char | 8 | 0 - 255 | |||
short | 16 | -32768 - 32767 | |||
unsigned short | 16 | 0 - 65535 | |||
int | 32 | -2147483648 - 2147483647 | |||
unsigned int | 32 | 0 - 4294967295 . | |||
long | 32 | -2147483648 - 2147483647 | |||
unsigned long | 32 | 0 - 4294967295 | |||
float | 32 | 3.410-38 - 3.41038 | |||
double | 64 | 1.71010-308 - 1.710308 | |||
long double | 80 | 3.410-4932 - 3.4104932 |

Может быть, стоит напомнить, что отрицательные целые числа представляются в машине в форме дополнения до двух. Чтобы изменить знак числа на противоположный, нужно инвертировать все его разряды (0 заменить на 1 и наоборот и прибавить к полученному числу единицу. Например, взяв +1 типа char (00000001), инвертировав все биты (11111110) и прибавив 1, мы получим -1 (11 111 111).
Ключевые слова short, long и unsigned являются, строго говоря, модификаторами для типа int. Однако допускается сокращенная запись. Так, unsigned short — на самом деле сокращение для unsigned short int.
Следует, вероятно, повторить, что мы говорим здесь о C++Builder 5, т. е. 32-разрядном компиляторе. Размер и допустимый диапазон значений приведены именно для данного случая. Поэтому, например, тип int имеет размер 32 бита (4 байта) и эквивалентен типу long; на 16-разрядной машине int имел бы размер 2 байта, как short. О таких вещах не следует забывать, особенно если вы занимаетесь переносом программ на машину с другой разрядностью.