Целые числаint — это число из множества ℤ = {..., -2, -1, 0, 1, 2, ...}.
&reftitle.seealso;
Числа с плавающей точкойВычисления над числами с произвольной точностью BCMathВычисления над целыми числами с произвольной точностью (GNU Multiple Precision)Синтаксис
Целые числа (int) могут быть указаны в десятичной (основание 10), шестнадцатеричной
(основание 16), восьмеричной (основание 8) или двоичной (основание 2) системе счисления.
Для задания отрицательных целых (int) используют
оператор отрицания
Для записи в восьмеричной системе счисления перед числом ставят 0 (ноль).
Начиная с PHP 8.1.0 восьмеричной нотации также может предшествовать 0o или 0O.
Для записи в шестнадцатеричной системе счисления необходимо поставить перед числом 0x.
Для записи в двоичной системе счисления необходимо поставить перед числом 0b
Начиная с PHP 7.4.0 целочисленные литералы могут содержать
подчёркивания (_) между цифрами для лучшей
читаемости литералов. Эти подчёркивания удаляются сканером PHP.
Целые числа
]]>
Формально, структура целых чисел int принята в PHP 8.1.0
(ранее не допускались восьмеричные префиксы 0o или 0O,
а до PHP 7.4.0 не допускалось подчёркивание):
Размер типа int зависит от платформы, хотя, как правило,
максимальное значение примерно равно 2 миллиардам (это 32-битное знаковое).
64-битные платформы обычно имеют максимальное значение около 9E18.
PHP не поддерживает беззнаковые целые числа (int).
Размер int может быть определён
с помощью константы PHP_INT_SIZE, максимальное значение —
с помощью константы PHP_INT_MAX,
а с помощью константы PHP_INT_MIN можно
определить минимальное значение.
Переполнение целых чисел
Если PHP обнаружил, что число превышает размер типа int,
он будет интерпретировать его в качестве float. Аналогично,
если результат операции лежит за границами типа int, он будет преобразован во float.
Переполнение целых на 32-битных системах
]]>
Переполнение целых на 64-битных системах
]]>
В PHP нет оператора целочисленного (int) деления,
для этого существует функция intdiv.
Результатом 1/2 будет float0.5.
Если привести значение к int, оно будет округлено вниз, то есть
будет отброшена дробная часть числа.
Для большего контроля над округлением используют функцию round.
]]>
Преобразование в целое
Для явного преобразования в тип int используют приведение
(int) или (integer). Однако
в большинстве случаев в приведении типа нет необходимости, так как значение
будет автоматически преобразовано, если оператор, функция или управляющая структура
требует аргумент типа int. Значение также может быть преобразовано в
тип int функцией intval.
Если значением с типом resource преобразовывается в значением с типом int, то
результатом будет уникальный номер ресурса, привязанный к
resource во время исполнения PHP программы.
Смотрите также: Манипуляции с типами.
Из логического типа
Логическое значение &false; преобразовывается в 0 (ноль), а &true; —
в 1 (единицу).
Из чисел с плавающей точкой
При преобразовании из float в int число будет округлено
вниз.
Начиная с PHP 8.1.0 при неявном преобразовании неинтегрального числа с плавающей точкой (&float;)
в целое число (&integer;), которое теряет точность, выдаётся уведомление об устаревании.
]]>
Если число с плавающей точкой превышает размеры int (обычно
± 2.15e+9 = 2^31 на 32-битных системах и
± 9.22e+18 = 2^63 на 64-битных системах, результат будет неопределённым,
так как float не имеет достаточной точности, чтобы вернуть верный результат в виде целого числа (int).
В этом случае не будет выведено ни предупреждения, ни даже замечания!
Значения NaN и Infinity при приведении к int становятся равными нулю,
вместо неопределённого значения в зависимости от платформы.
Нельзя приводить неизвестную дробь к типу int, так как это
иногда может дать неожиданные результаты.
]]>
Подробнее об этом рассказано в предупреждении о точности чисел
с плавающей точкой.
Из строк
Если строка
содержит число
или ведущую числовую последовательность, тогда она будет преобразована в соответствующее целое число,
в противном случае она преобразуется в ноль (0).
Из NULL
Значение &null; всегда преобразовывается в ноль (0).
Из других типов
Для других типов поведение преобразования в int не определено.
Не нужно полагаться на наблюдаемое ранее поведение,
так как оно может измениться без предупреждения.