Целочисленный тип данных¶
Целочисленный тип данных (integer, int) — примитивный тип данных в языках программирования, значения которого представляют собой целые числа. В отличие от типа с плавающей точкой, целочисленный тип хранит числа без дробной части и знака запятой. В большинстве языков программирования (C, C++, Java, C#, Python, JavaScript) используется сокращение int для обозначения базового целочисленного типа.
¶Представление в памяти
Целое число в компьютере хранится в виде последовательности битов. Классическое представление — дополнительный код (two's complement), в котором старший бит отвечает за знак числа. При фиксированной разрядности n битов в дополнительном коде можно представить числа от −2ⁿ⁻¹ до 2ⁿ⁻¹ − 1.
| Типичный размер | Диапазон значений |
|---|---|
| 8 бит (int8_t, byte) | −128 … 127 |
| 16 бит (int16_t, short) | −32 768 … 32 767 |
| 32 бит (int32_t, int) | −2 147 483 648 … 2 147 483 647 |
| 64 бит (int64_t, long long) | −9,2·10¹⁸ … 9,2·10¹⁸ |
В языке C стандарт гарантирует, что short занимает не менее 16 бит, int — не менее 16 бит (на практике 32 бита), long — не менее 32 бит. В языке Java тип int всегда 32-битный, а long — 64-битный. В Python целые числа имеют произвольную точность и ограничены только объёмом доступной памяти.
¶Беззнаковые и знаковые типы
Помимо знаковых целочисленных типов, во многих языках существуют беззнаковые (unsigned) варианты, в которых все биты используются для представления величины. Беззнаковый 32-битный тип хранит значения от 0 до 4 294 967 295. Выбор между знаковым и беззнаковым типом определяется задачей: индексы массивов, счётчики и битовые маски обычно объявляются как беззнаковые, тогда как результаты вычитания и значения, которые могут быть отрицательными, — как знаковые.
¶Арифметические операции
Над целыми числами определены стандартные арифметические операции: сложение, вычитание, умножение, целочисленное деление и остаток от деления. Особенностью целочисленной арифметики является переполнение: если результат операции выходит за пределы диапазона типа, поведение зависит от языка. В C и C++ переполнение знакового типа не определено стандартом, тогда как в Java и C# гарантировано переполнение по модулю 2ⁿ (циклическое переполнение).
Целочисленное деление в большинстве языков отбрасывает дробную часть: 7 / 2 = 3. Оператор остатка % возвращает остаток от деления, причём в C и Java знак остатка совпадает со знаком делимого.
¶Целочисленные типы в популярных языках
| Язык | Базовый тип | Размер | Примечание |
|---|---|---|---|
| C / C++ | int | 32 бита (обычно) | long long — 64 бита |
| Java | int | 32 бита | long — 64 бита |
| C# | int | 32 бита | long — 64 бита |
| Python | int | произвольный | без переполнения |
| JavaScript | Number | 64 бит (IEEE 754) | целые до 2⁵³ без потерь |
| Go | int | 32 или 64 бита | зависит от платформы |
| Rust | i32 | 32 бита | i64 — 64 бита |
В JavaScript нет отдельного целочисленного типа: все числа хранятся как 64-битные числа с плавающей точкой по стандарту IEEE 754, поэтому целые значения выше 2⁵³ − 1 (9 007 199 254 740 991) представляются с потерей точности. Для работы с большими целыми числами в JavaScript используется объект BigInt.
¶Применение
Целочисленные типы используются повсеместно: для индексации массивов и списков, подсчёта элементов, хранения идентификаторов, работы с битовыми масками и флагами, представления кодов символов (Unicode) и в алгоритмах, где дробная часть не нужна (например, в алгоритмах Евклида для нахождения наибольшего общего делителя). В системном программировании целочисленная арифметика применяется для адресации памяти и работы с регистрами процессора.
¶См. также
- Тип данных
- Целочисленное переполнение
- Дополнительный код
- IEEE 754
¶Источники
- Керниган Б., Ритчи Д. Язык программирования C. — СПб.: БХВ-Петербург, 2011.
- Страуструп Б. Принципы и практика использования C++. — СПб.: Питер, 2019.
- Линдхолм Т., Йеллин Ф., Арнольд К., Гослинг Дж. Java Virtual Machine Specification. — Addison-Wesley, 2013.
- Шилдт Б. Полный справочник по C#. — СПб.: БХВ-Петербург, 2019.
