Um inteiro é um número do conjunto Z = {..., -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), opcionalmente precedido de sinal (- ou +).
Inteiros binários literais estão disponíveis desde o 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.
Exemplo #1 Literais inteiras
<?php
$a = 1234; // número decimal
$a = -123; // um número negativo
$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)
?>
Formalmente, as estruturas para inteiros literais são:
decimal : [1-9][0-9]* | 0 hexadecimal : 0[xX][0-9a-fA-F]+ octal : 0[0-7]+ binary : 0b[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
, desde o PHP 4.4.0 e PHP 5.0.5,
e o valor mínimo utilizando a constante PHP_INT_MIN
desde o
PHP 7.0.0.
Em versões anteriores ao PHP 7, se um dígito inválido é passado para inteiro octal (por exemplo, 8 ou 9), o resto do número será ignorado. Desde o 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 integer 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.
<?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, utilize-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 integer (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 convertido para integer, a partir do PHP 7.0.0.
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.
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.