Int — это число из множества ℤ = {..., -2, -1, 0, 1, 2, ...}.
int может быть указан в десятичной (по основанию 10), шестнадцатеричной (по основанию 16), восьмеричной (по основанию 8) или двоичной (по основанию 2) записи. Оператор отрицания может использоваться для обозначения отрицательного целого числа .
Чтобы использовать восьмеричное представление, поставьте перед числом 0
(ноль). Начиная с PHP 8.1.0, восьмеричной записи также может предшествовать 0o
или 0O
. Для использования шестнадцатеричной системы счисления перед числом ставится 0x
. Чтобы использовать двоичную запись, перед номером ставится 0b
.
Начиная с PHP 7.4.0, целочисленные литералы могут содержать знаки подчеркивания ( _
) между цифрами для лучшей читаемости литералов. Эти символы подчеркивания удаляются сканером PHP.
Пример #1 Целочисленные литералы
<?php
$a = 1234; // decimal number
$a = 0123; // octal number (equivalent to 83 decimal)
$a = 0o123; // octal number (as of PHP 8.1.0)
$a = 0x1A; // hexadecimal number (equivalent to 26 decimal)
$a = 0b11111111; // binary number (equivalent to 255 decimal)
$a = 1_234_567; // decimal number (as of PHP 7.4.0)
?>
Формально структура для литералов int такая же, как и в PHP 7.4.0 (ранее символы подчеркивания не допускались):
десятичный: [1-9][0-9]*(_[0-9]+)*
| 0
шестнадцатеричный: 0[xX][0-9a-fA-F]+(_[0-9a-fA-F]+)*
восьмеричное: 0[oO]?[0-7]+(_[0-7]+)*
двоичный: 0[bB][01]+(_[01]+)*
целое: десятичное
| шестнадцатеричный
| восьмеричный
| бинарный
Размер int зависит от платформы, хотя максимальное значение около двух миллиардов является обычным значением (это 32 бита со знаком). 64-битные платформы обычно имеют максимальное значение около 9E18. PHP не поддерживает беззнаковые целые числа. размер int можно определить с помощью константы PHP_INT_SIZE
, максимальное значение с помощью константы PHP_INT_MAX
и минимальное значение с помощью константы PHP_INT_MIN
.
Целочисленное переполнение
Если PHP встретит число, выходящее за пределы типа int , оно будет интерпретировано как число с плавающей запятой . Кроме того, операция, результатом которой является число, выходящее за пределы типа int , вместо этого вернет число с плавающей запятой .
Пример #2 Целочисленное переполнение в 32-битной системе
<?php
$large_number = 2147483647;
var_dump($large_number); // int(2147483647)
$large_number = 2147483648;
var_dump($large_number); // float(2147483648)
$million = 1000000;
$large_number = 50000 * $million;
var_dump($large_number); // float(50000000000)
?>
Пример #3 Целочисленное переполнение в 64-битной системе
<?php
$large_number = 9223372036854775807;
var_dump($large_number); // int(9223372036854775807)
$large_number = 9223372036854775808;
var_dump($large_number); // float(9.2233720368548E+18)
$million = 1000000;
$large_number = 50000000000000 * $million;
var_dump($large_number); // float(5.0E+19)
?>
В PHP нет оператора деления int , для этого используйте функцию intdiv() . 1/2
дает поплавок 0.5
. Значение может быть приведено к типу int , чтобы округлить его до нуля, или функция round() обеспечивает более точное управление округлением.
<?php
var_dump(25/7); // float(3.5714285714286)
var_dump((int) (25/7)); // int(3)
var_dump(round(25/7)); // float(4)
?>
Преобразование в целое число
Чтобы явно преобразовать значение в int , используйте приведение типов (int)
или (integer)
. Однако в большинстве случаев приведение не требуется, поскольку значение будет автоматически преобразовано, если оператору, функции или управляющей структуре требуется аргумент типа int . Значение также можно преобразовать в int с помощью функции intval() .
Если ресурс преобразуется в int , результатом будет уникальный номер ресурса, присвоенный ресурсу PHP во время выполнения.
Из логических значений
false
даст 0
(ноль) и true
даст 1
(один).
Из чисел с плавающей запятой
При преобразовании из float в int число будет округлено до нуля .
Если число с плавающей запятой выходит за пределы int (обычно +/- 2.15e+9 = 2^31
на 32-разрядных платформах и +/- 9.22e+18 = 2^63
на 64-разрядных платформах), результат не определен, поскольку точность числа с плавающей запятой недостаточна для получения точного результата типа int . Никакого предупреждения, даже уведомления не будет, когда это произойдет!
Примечание :
NaN и Infinity всегда будут равны нулю при приведении к int .
Предупреждение
Никогда не приводите неизвестную дробь к типу int , так как иногда это может привести к неожиданным результатам.
<?php
echo (int) ( (0.1+0.7) * 10 ); // echoes 7!
?>
Из строк
Если строка является числовой или ведущей цифрой, она будет преобразована в соответствующее целочисленное значение, в противном случае она будет преобразована в ноль ( 0
).
От NULL
null
всегда преобразуется в ноль ( 0
).
Из других типов
Осторожность
Поведение преобразования в int не определено для других типов. Не полагайтесь на какое-либо наблюдаемое поведение, поскольку оно может измениться без предварительного уведомления.
0 комментариев