Целое (тип данных)


Целое, целочисленный тип данных (англ. integer) — один из самых простых примитивных типов данных в информатике. Служит для представления целых чисел, ограниченного минимальным и максимальным значением, зависящими от выделенной под число памяти.

Как правило, для большинства задач используется целочисленный тип, называемый также native int (или просто int), с разрядностью, равной разрядности машинного слова процессора, на котором исполняется программа (или режима работы процессора если он может работать с машинными словами разной длины). При необходимости могут использоваться целые числа как меньшей (например, при необходимости экономить память), так и бо́льшей (при использовании длинной арифметики) разрядности. Другая возможная причина использования целых отличной от родной длины — обеспечение переносимости данных. Наиболее распространённые разновидности целого:

Также если необходимо экономить память, но нет необходимости в представлении отрицательных чисел, могут использоваться беззнаковые (unsigned) целые, что позволяет увеличить максимально возможное значение вдвое и ещё на единицу: например, беззнаковым коротким целым можно представить число от 0 до 65 535. Иногда в литературе[1] встречаются рекомендации не использовать беззнаковые целые, поскольку он может быть не реализован процессором компьютера. Также поддержка беззнаковых типов отсутствует в некоторых языках программирования, например в Java[2].

Использование беззнаковых целых оправдано в алгоритмах, использующих целочисленное переполнение — дело в том, что оптимизирующие компиляторы могут менять порядок операций и производить алгебраические преобразования, в результате чего переполнение в оптимизированном алгоритме может происходить в другой момент, чем в неоптимизированном, или не происходить вовсе, что приводит к неопределённому поведению. Для беззнаковых целых оптимизации, влияющие на арифметическое переполнение запрещены, благодаря чему поведение при переполнении всегда определено, но машинный код, генерируемый компилятором, становится менее оптимальным.

В памяти целое число хранится как последовательность битов, разбитая на байты (октеты). Порядок следования байтов может быть как прямым (англ. big-endian), от старшего разряда к младшему, так и обратным (англ. little-endian).

Представление знака тоже может различаться для разных архитектур. Наиболее распространён так называемый дополнительный код, при котором отрицательное число представлено вычитанием из 0 с переполнением, при этом если старший бит старшего байта включён — число считается отрицательным. Реже используются обратный код (когда отрицательное число представлено как побитовая инверсия положительного), прямой код (когда отрицательное число представлено как положительное со включённым битом знака) или более экзотические, такие как система счисления по основанию −2[3].