Logo
You
Code

Enteros

Autor YouCode - http://www.youcode.com.ar/php/enteros-20

Un entero o integer es un número del conjunto ? = {..., -2, -1, 0, 1, 2, ...}.

 Sintaxis

Los integer pueden ser especificados mediante notación decimal (base 10), hexadecimal (base 16), octal (base 8) o binaria (base 2), opcionalmente precedidos por un signo (- o +).
Los literales integer binarios están disponibles desde PHP 5.4.0.
Para usar la notación octal, se antepone al número un 0 (cero). Para usar la notación hexadecimal, se antepone al número un 0x. Para usar la notación binaria, se antepone al número un 0b.
Ejemplo #1 Enteros literales
<?php
$a 
1234// número decimal
$a = -123// un número negativo
$a 0123// número octal (equivalente a 83 decimal)
$a 0x1A// número hexadecimal (equivalente a 26 decimal)
?>
Formalmente, la estructura de integer literales es:

 

decimal     : [1-9][0-9]*
            | 0
 
hexadecimal : 0[xX][0-9a-fA-F]+
 
octal       : 0[0-7]+
 
binario     : 0b[01]+
 
entero      : [+-]?decimal
            | [+-]?hexadecimal
            | [+-]?octal
            | [+-]?binary

El tamaño de un integer depende de la plataforma, aunque un valor máximo de aproximadamente dos mil millones es el valor usual (para 32 bits con signo). Las plataformas de 64-bits normalmente tienen un valor máximo de aproximadamente 9E18. PHP no admite integers sin signo. El tamaño de un integer puede ser determinado mediante la constante PHP_INT_SIZE y el valor máximo mediante la constante PHP_INT_MAX desde PHP 4.4.0 y PHP 5.0.5.

Advertencia
Si en un integer octal se da un dígito incorrecto (por ejemplo 8 o 9), el resto del número se ignora.
Ejemplo #2 Octal raros
<?php
var_dump
(01090); // 010 octal = 8 decimal
?>
Desbordamiento de enteros
Si PHP encuentra un número fuera de los límites de un integer, se interpretará como un float en su lugar. Tambien, una operación cuyo resultado es un número fuera de los límites de un integer devolverá en su lugar un float.
Ejemplo #3 Desbordamiento de enteros en sistemas 32-bits
<?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)
?>
Ejemplo #4 Desbordamiento de enteros en sistemas 64-bits
<?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)
?>
No existe operador de división de integer en PHP. 1/2produce el float 0.5. El valor puede ser forzado a ser un integer redondeando por defecto, o mediante la función round() que permite un mayor control sobre el redondeo.
<?php
var_dump
(25/7);         // float(3.5714285714286) 
var_dump((int) (25/7)); // int(3)
var_dump(round(25/7));  // float(4) 
?>
Conversión a enteros
Para convertir explicitamente un valor a integer, se puede emplear tanto (int) como (integer). Sin embargo, la mayoría de las veces la conversión no es necesaria, ya que un valor es convertido de forma automática cuando un operador, función o estructura de control necesite un argumento del tipo integer. Un valor tambien puede ser convertido a integer mediante la función intval().
 
Desde booleanos
FALSE produce 0 (cero), y TRUE produce 1 (uno).
Desde números de punto flotante
Cuando se convierte de un float a un integer, el número será redondeado hacia cero.
Si el float esta por debajo de los límites de un integer (normalmente +/- 2.15e+9 = 2^31 en plataformas de 32 bits y +/- 9.22e+18 = 2^63 en plataformas de 64 bits), el resultado es indefinido, debido a que float no tiene la precisión suficiente para ofrecer el resultado como un integer exacto. No se mostrará ninguna advertencia, ni siquiera un aviso cuando esto ocurre!
Advertencia
Nunca se debe convertir una fracción desconocida a un integer, ya que a veces puede producir resultados inesperados.
<?php
echo (int) ( (0.1+0.7) * 10 ); // muestra 7!
?>
 
Desde otros tipos
Precaución
El comportamiento de la conversion de integer a otros tipos es indefinido. No espere que exista un comportamiento esperado, ya que puede cambiar sin previo aviso. 

http://www.youcode.com.ar/php/enteros-20