Целое (тип данных)
- 1 year ago
- 0
- 0
Целое , целочисленный тип данных ( англ. integer ) — один из самых простых примитивных типов данных . Служит для представления целых чисел , ограниченного минимальным и максимальным значением, зависящими от выделенной под число памяти.
Как правило, для большинства задач используется целочисленный тип, называемый также native int (или просто int ), с разрядностью, равной разрядности машинного слова процессора, на котором исполняется программа (или режима работы процессора если он может работать с машинными словами разной длины). При необходимости могут использоваться целые числа как меньшей (например, при необходимости экономить память), так и бо́льшей (при использовании длинной арифметики ) разрядности. Другая возможная причина использования целых отличной от родной длины — обеспечение переносимости данных. Наиболее распространённые разновидности целого:
Также если необходимо экономить память, но нет необходимости в представлении отрицательных чисел, могут использоваться беззнаковые (unsigned) целые, что позволяет увеличить максимально возможное значение вдвое и ещё на единицу: например, беззнаковым коротким целым можно представить число от 0 до 65 535. Иногда в литературе встречаются рекомендации не использовать беззнаковые целые, поскольку он может быть не реализован процессором компьютера. Также поддержка беззнаковых типов отсутствует в некоторых языках программирования, например в Java .
Использование беззнаковых целых оправдано в алгоритмах, использующих целочисленное переполнение — дело в том, что оптимизирующие компиляторы могут менять порядок операций и производить алгебраические преобразования, в результате чего переполнение в оптимизированном алгоритме может происходить в другой момент, чем в неоптимизированном, или не происходить вовсе, что приводит к неопределённому поведению . Для беззнаковых целых оптимизации, влияющие на арифметическое переполнение запрещены, благодаря чему поведение при переполнении всегда определено, но машинный код, генерируемый компилятором, становится менее оптимальным.
В памяти целое число хранится как последовательность битов , разбитая на байты (октеты). Порядок следования байтов может быть как прямым ( англ. big-endian ), от старшего разряда к младшему, так и обратным ( англ. little-endian ).
Представление знака тоже может различаться для разных архитектур . Наиболее распространён так называемый дополнительный код , при котором отрицательное число представлено вычитанием из 0 с переполнением, при этом если старший бит старшего байта включён — число считается отрицательным. Реже используются обратный код (когда отрицательное число представлено как побитовая инверсия положительного), прямой код (когда отрицательное число представлено как положительное со включённым битом знака) или более экзотические, такие как система счисления по основанию −2 .
В калькуляторах и некоторых ранних компьютерах также применялось представление целых чисел в виде двоично-десятичного кода . Такой код упрощает устройство индикации и делает представление числа в памяти более человекочитаемым, но усложняет арифметическо-логическое устройство и требует больше памяти для представления тех же чисел.
К целочисленным значениям применимы в первую очередь арифметические операции. Ниже приведены самые часто используемые (в скобках указаны их обозначения в различных языках программирования и им аналогичным средствах).
=
»; «
==
»; «
eq
»), «не равно» («
!=
»; «
<>
»; «
ne
»), «больше» («
>
»; «
gt
»), «больше или равно» («
>=
»; «
ge
»), «меньше» («
<
»; «
lt
») и «меньше или равно» («
<=
»; «
le
»).
++
») и
декремент
(
англ.
dec
rement
; «
--
») — арифметическое увеличение или уменьшение числа на единицу. Выделено в отдельные операции из-за частого использования с переменными-счётчиками в программировании.
+
») и
вычитание
(
англ.
sub
traction
; «
-
»).
*
»).
/
»; «
\
») и получение
остатка от деления
(
англ.
mod
ulo
; «
%
»). Некоторые процессоры (например, архитектуры x86) позволяют производить обе эти операции за одну инструкцию.
«^»
).
В некоторых языках программирования для лаконичности есть операторы, которые позволяют производить арифметическую операцию с присвоением. Например, «
+=
» складывает текущее значение переменной слева с выражением справа и помещает результат в исходную переменную.
Так же в некоторых языках и средах доступна совмещённая операция
MulDiv
, которая умножает на одно число, а потом делит результат на второе.
Обычно самыми дорогими по скорости операциями являются умножение и деление (получение остатка от деления).
В памяти компьютера для хранения целых чисел обычно отводятся ячейки фиксированного объёма. Из-за этого операции увеличения и уменьшения значений могут приводить к переполнению, что оборачивается искажением результата. Некоторые языки программирования позволяют производить вызов исключения в таких случаях. Кроме этого, можно определять поведение при переполнении:
Помимо математических, к целым числам применимы битовые операции , которые основаны на особенностях позиционного двоичного кодирования. Обычно они выполняются значительно быстрее арифметических операций и поэтому их используют как более оптимальные аналоги.
Довольно частыми операциями являются получение строки из числового значения во внутреннем представлении и обратно — число из строки. При преобразовании в строку обычно доступны средства задания форматирования в зависимости от языка пользователя.
Ниже перечислены некоторые из представлений чисел строкой.
К целым относится также перечисляемый тип [ источник не указан 690 дней ] . Переменные перечислимого типа принимают конечный заранее заданный набор значений. Размер набора не определяется числом байтов, используемых для представления целочисленных значений переменных такого типа.
Например, в языке Python логический тип является подтипом целого и использует имена False и True, которые при приведении к целому получают значения 0 и 1 соответственно .