Paster Fob писал(а):Я изучал что тип integer имеет диапозон от -32768 до 32767 а в книге совсем другое.
Смотря где Вы это изучали.

Если взять, качестве примера, FreePascal, то у него есть несколько режмов компиляции:
1) {$mode tp} - режим компиляции для совместимости с Turbo\Borland Pascal. Этот режим для тех, кто писал раньше программы на ТР\ВР и его код ориентирован на особенности именно 16-ти битных программ, а переписывать лень.
Откомпилируйте и запустите такой пример:
Код: Выделить всё
{$mode tp}
Program sizeinteger;
Begin
WriteLn(SizeOf(Integer));
ReadLn;
End.
Программа выводит на экран целочисленный тип данных (Integer) в байтах. Программа покажет размер 2 байта. В 2 байта как раз влезают числа от -32768 до +32767, можете проверить.
2) {$mode objfpc} - это режим для современных, 32-ух или 64-ёх битных систем. При этом целочисленный тип уже ориентирован на 4 байта.
Откомпилируйте и запустите такой пример:
Код: Выделить всё
{$mode objfpc}
Program sizeinteger;
Begin
WriteLn(SizeOf(Integer));
ReadLn;
End.
Программа Вам покажет размер 4 байта, т.е. в переменную целочисленного типа влезут уже от - 2147483648 до +2147483647. Вы спросите, зачем это нужно? В этом кроется большой, но глубокий смысл.

Дело в том, что 16-ти битной ОС быстрее и удобнее читать данные блоками по 16 бит или по 2 байта, а 32-ух битным, соответственно по 32 бита или по 4 байта. Теперь смотрите, если мы в 32-ух битной системе откомпилируем программу как 16-ти битную, то либо у нас в коде будут зиять дыры по 2 байта, т.к. заняты только 2, а ОС удобнее брать 4-ёх байтные блоки - нерациональное распределение памяти, либо программе придётся совершать лишние телодвижения для того, чтобы вернуться на 2 байта назад, чтобы прочитать те самые 2 байта, которые к 4-ёх байтному блоку уже не относятся - это сильно снижает быстродействие. Поэтому в 32-ух битной ОС нужно компилировать именно в 32-ух битном режиме.