Um inteiro é um número do conjunto ℤ = {..., -2, -1, 0, 1, 2, ...}.
Veja também:
Inteiros podem ser especificados em notação decimal (base 10), hexadecimal (base 16), octal (base 8) ou binária (base 2). O operador de negação pode ser usado para indicar um inteiro negativo.
Inteiros binários literais estão disponíveis a partir do PHP 5.4.0.
Para usar a notação octal, preceda o número com um 0
(zero).
Para utilizar a notação hexadecimal, preceda o número com 0x
.
Para utilizar a notação binária, preceda o número com 0b
.
A partir do PHP 7.4.0, inteiros literais podem conter sublinhados (_
) entre os dígitos,
para melhorar a sua leitura. Estes sublinhados serão removidos pelo scanner do PHP.
Exemplo #1 Literais inteiras
<?php
$a = 1234; // número decimal
$a = 0123; // número octal (equivalente a 83 em decimal)
$a = 0x1A; // número hexadecimal (equivalente a 26 em decimal)
$a = 0b11111111; // número binário (equivalente ao 255 decimal)
$a = 1_234_567; // decimal number (as of PHP 7.4.0)
?>
Formalmente, as estruturas para inteiros literais são a partir do PHP 7.4.0 (anteriormente, sublinhados não eram permitidos):
decimal : [1-9][0-9]*(_[0-9]+)* | 0 hexadecimal : 0[xX][0-9a-fA-F]+(_[0-9a-fA-F]+)* octal : 0[0-7]+(_[0-7]+)* binary : 0[bB][01]+(_[01]+)* integer : decimal | hexadecimal | octal | binary
O tamanho de um inteiro depende da plataforma, sendo
um número aproximado a 2 bilhões o valor mais comum (número de 32 bits com sinal).
Plataformas 64-bit possuem comumente o valor máximo de aproximadamente 9E18, exceto no
Windows em versões anteriores ao PHP 7, onde são sempre 32-bit.
O PHP não suporta inteiros sem sinal. O tamanho do inteiro pode ser determinado
pela constante PHP_INT_SIZE
, e seu o valor máximo com
a constante PHP_INT_MAX
, a partir do PHP 5.0.5,
e o valor mínimo utilizando a constante PHP_INT_MIN
a partir do
PHP 7.0.0.
Em versões anteriores ao PHP 7, se um dígito inválido é passado para um inteiro octal (por exemplo, 8 ou 9), o resto do número será ignorado. A partir do PHP 7, um erro de interpretação é emitido.
Se o PHP encontrar um número além dos limites do tipo inteiro, ele será interpretado como um ponto flutuante. Assim, uma operação que resulte em um número além dos limites do tipo inteiro, retornará um ponto flutuante.
Exemplo #2 Overflow de inteiros em sistemas 32-bit
<?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)
?>
Exemplo #3 Overflow de inteiros em sistemas 64-bit
<?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)
?>
Não há um operador de divisão que resulta em um inteiro no PHP.
1/2
retorna o ponto flutuante 0.5
.
O valor pode ser convertido para inteiro para sempre truncar o número, ou
usar a função round() que provê um fino controle sobre o arredondamento.
Nota: A partir do PHP 7.0.0, a função intdiv() está disponível para uma divisão inteira.
<?php
var_dump(25/7); // float(3.5714285714286)
var_dump((int) (25/7)); // int(3)
var_dump(round(25/7)); // float(4)
?>
Para converter explicitamente um valor para inteiro, utiliza-se um dos modificadores
(int)
ou (integer)
. Entretanto, na
maioria dos casos, o modificador não é necessário, já que o valor
será automaticamente convertido se um operador, função ou estrutura de controle
requerer um inteiro como argumento. Um valor também pode ser convertido para
inteiro utilizando a função intval().
Se um recurso for convertido para um inteiro, resultará no número único do recurso, atribuído ao recurso pelo PHP em tempo de execução.
Veja também Manipulação de tipos.
false
será retornado como 0
(zero), e true
retornará
1
(um).
Conversão de números de ponto flutuante para inteiros, fará o número ser truncado.
Se o número convertido estiver além dos limites de um inteiro (geralmente
+/- 2.15e+9 = 2^31
em plataformas 32 bit e
+/- 9.22e+18 = 2^63
em plataformas 64-bit que não sejam Windows), o resultado é indefinido,
por que o ponto flutuante não
possui precisão suficiente para fornecer um resultado inteiro exato. Não se preocupe,
pois nenhum aviso será emitido se isso acontecer!
Nota:
A partir do PHP 7.0.0, em vez de ser um valor indefinido e que varia de acordo com a plataforma, NaN e Infinity sempre serão zero quando convertidos para inteiro.
Nunca modifique uma fração desconhecida para inteiro, porque isto pode, as vezes, fornecer resultados inesperados.
<?php
echo (int) ( (0.1+0.7) * 10 ); // imprime 7!
?>
Veja também o alerta sobre a precisão de número flutuante.
null
é sempre convertido em zero (0
).
O comportamento da conversão de um inteiro é desconhecido para outros tipos. Não confie em nenhum comportamento observado, pois ele pode mudar sem aviso.