1
0
mirror of https://github.com/php/doc-es.git synced 2026-03-26 00:12:06 +01:00
Files
archived-doc-es/language/types/integer.xml
Pedro Antonio Gil Rodríguez 885bdbdb38 Actualización a la última versión
git-svn-id: https://svn.php.net/repository/phpdoc/es/trunk@338457 c90b9560-bf6c-de11-be94-00142212c4b1
2016-01-11 12:48:50 +00:00

299 lines
9.0 KiB
XML

<?xml version="1.0" encoding="utf-8"?>
<!-- $Revision$ -->
<!-- EN-Revision: fb3920c122edad53d0dbf02685ba25e7a7200fa8 Maintainer: seros Status: ready -->
<!-- Reviewed: yes Maintainer: seros -->
<sect1 xml:id="language.types.integer">
<title>Números enteros (Integers)</title>
<simpara>
Un número entero (o <type>integer</type>) es un número del conjunto
&#8484; = {..., -2, -1, 0, 1, 2, ...}.
</simpara>
<para>
Véase también:
</para>
<itemizedlist>
<listitem>
<simpara>
<link linkend="book.gmp">Enteros de longitud arbitraria / GMP</link>
</simpara>
</listitem>
<listitem>
<simpara>
<link linkend="language.types.float">Números de punto flotante</link>
</simpara>
</listitem>
<listitem>
<simpara>
<link linkend="book.bc">Precisión arbitraria / BCMath</link>
</simpara>
</listitem>
</itemizedlist>
<sect2 xml:id="language.types.integer.syntax">
<title>Sintaxis</title>
<simpara>
Los <type>integer</type> pueden especificarse mediante notación decimal
(base 10), hexadecimal (base 16), octal (base 8) o binaria (base 2), opcionalmente
precedidos por un signo (- o +).
</simpara>
<para>
Los literales de tipo <type>integer</type> binarios están disponibles desde PHP 5.4.0.
</para>
<para>
Para utilizar la notación octal, se antepone al número un <literal>0</literal> (cero).
Para utilizar la notación hexadecimal, se antepone al número <literal>0x</literal>.
Para utilizar la notación binaria, se antepone al número <literal>0b</literal>.
</para>
<example>
<title>Literales de números enteros</title>
<programlisting role="php">
<![CDATA[
<?php
$a = 1234; // número decimal
$a = -123; // un número negativo
$a = 0123; // número octal (equivale a 83 decimal)
$a = 0x1A; // número hexadecimal (equivale a 26 decimal)
$a = 0b11111111; // número binario (equivale al 255 decimal)
?>
]]>
</programlisting>
</example>
<para>
Formalmente, la estructura de los literales de tipo <type>integer</type> es:
</para>
<informalexample>
<programlisting>
<![CDATA[
decimal : [1-9][0-9]*
| 0
hexadecimal : 0[xX][0-9a-fA-F]+
octal : 0[0-7]+
binario : 0b[01]+
entero : [+-]?decimal
| [+-]?hexadecimal
| [+-]?octal
| [+-]?binario
]]>
</programlisting>
</informalexample>
<para>
El tamaño de un <type>integer</type> depende de la plataforma, aunque el valor usual
es un valor máximo de aproximadamente dos mil millones (esto es, 32 bits con signo).
Las plataformas de 64 bits normalmente tienen un valor máximo de aproximadamente 9E18, excepto en
Windows antes de PHP 7, que siempre es de 32 bits. PHP no tiene soporte para el tipo
<type>integer</type> sin signo. El tamaño de un <type>integer</type> se puede determinar
mediante la constante <constant>PHP_INT_SIZE</constant>, y el valor máximo mediante la
constante <constant>PHP_INT_MAX</constant> desde PHP 4.4.0 y PHP 5.0.5,
y el valor mínimo mediante la constante <constant>PHP_INT_MIN</constant> desde
PHP 7.0.0.
</para>
<warning>
<para>
Antes de PHP 7, si a un <type>integer</type> octal se le proporcionaba un dígito no válido
(esto es, 8 o 9), se ignoraba el resto del número. Desde PHP 7, se emite un error
de análisis.
</para>
</warning>
</sect2>
<sect2 xml:id="language.types.integer.overflow">
<title>Desbordamiento de enteros</title>
<para>
Si PHP encuentra un número fuera de los límites de un <type>integer</type>,
se interpretará en su lugar como un valor de tipo <type>float</type>. También, una
operación cuyo resultado sea un número fuera de los límites de un
<type>integer</type> devolverá en su lugar un valor de tipo <type>float</type>.
</para>
<example>
<title>Desbordamiento de enteros en sistemas de 32 bit</title>
<programlisting role="php">
<![CDATA[
<?php
$número_grande = 2147483647;
var_dump($número_grande); // int(2147483647)
$número_grande = 2147483648;
var_dump($número_grande); // float(2147483648)
$millón = 1000000;
$número_grande = 50000 * $millón;
var_dump($número_grande); // float(50000000000)
?>
]]>
</programlisting>
</example>
<example>
<title>Desbordamiento de enteros en sistemas de 64 bit</title>
<programlisting role="php">
<![CDATA[
<?php
$número_grande = 9223372036854775807;
var_dump($número_grande); // int(9223372036854775807)
$número_grande = 9223372036854775808;
var_dump($número_grande); // float(9.2233720368548E+18)
$millón = 1000000;
$número_grande = 50000000000000 * $millón;
var_dump($número_grande); // float(5.0E+19)
?>
]]>
</programlisting>
</example>
<para>
No existe el operador de división de <type>integer</type> en PHP.
<literal>1/2</literal> produce el <type>float</type> <literal>0.5</literal>.
El valor puede ser convertido a un <type>integer</type> redondeándolo a cero, o
mediante la función <function>round</function> que permite un mayor control sobre el redondeo.
</para>
<informalexample>
<programlisting role="php">
<![CDATA[
<?php
var_dump(25/7); // float(3.5714285714286)
var_dump((int) (25/7)); // int(3)
var_dump(round(25/7)); // float(4)
?>
]]>
</programlisting>
</informalexample>
</sect2>
<sect2 xml:id="language.types.integer.casting">
<title>Conversión a números enteros</title>
<simpara>
Para convertir explícitamente un valor al tipo <type>integer</type> se puede emplear
tanto <literal>(int)</literal> como <literal>(integer)</literal>. 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 requiera un
argumento de tipo <type>integer</type>. Un valor también puede ser convertido al
tipo <type>integer</type> mediante la función <function>intval</function>.
</simpara>
<simpara>
Si un <type>resource</type> es convertido a un <type>integer</type>,
el resultado será el número de recurso único asignado al
<type>resource</type> por PHP durante la ejecución.
</simpara>
<simpara>
Consulte también la <link linkend="language.types.type-juggling">Manipulación de tipos</link>.
</simpara>
<sect3 xml:id="language.types.integer.casting.from-boolean">
<title>Desde <link linkend="language.types.boolean">booleanos</link></title>
<simpara>
&false; producirá <literal>0</literal> (cero), y &true; producirá
<literal>1</literal> (uno).
</simpara>
</sect3>
<sect3 xml:id="language.types.integer.casting.from-float">
<title>
Desde <link linkend="language.types.float">números de punto flotante</link>
</title>
<simpara>
Cuando se convierte un <type>float</type> a un <type>integer</type>, el número
será redondeado <emphasis>hacia cero</emphasis>.
</simpara>
<para>
Si el valor de tipo float esta por debajo de los límites de un <type>integer</type> (normalmente
<literal>+/- 2.15e+9 = 2^31</literal> en plataformas de 32 bits y
<literal>+/- 9.22e+18 = 2^63</literal> en plataformas de 64 bits distintas de
Windows), el resultado es indefinido, debido a que <type>float</type> no tiene
la precisión suficiente para ofrecer el resultado como un <type>integer</type> exacto.
No se mostrará ninguna advertencia, ni siquiera un aviso, cuando esto ocurra.
</para>
<warning>
<para>
Nunca se debe convertir una fracción desconocida a un <type>integer</type>, ya que
a veces puede conducir a resultados inesperados.
</para>
<informalexample>
<programlisting role="php">
<![CDATA[
<?php
echo (int) ( (0.1+0.7) * 10 ); // ¡muestra 7!
?>
]]>
</programlisting>
</informalexample>
<para>
Consulte también la <link linkend="warn.float-precision">advertencia sobre la precisión de
float</link>
</para>
</warning>
</sect3>
<sect3 xml:id="language.types.integer.casting.from-string">
<title>Desde cadenas de caracteres</title>
<simpara>
Consulte <link linkend="language.types.string.conversion">Conversión de string a
números</link>
</simpara>
</sect3>
<sect3 xml:id="language.types.integer.casting.from-other">
<title>Desde otros tipos</title>
<caution>
<simpara>
El comportamiento de la conversión de <type>integer</type> a otros tipos es indefinido.
<emphasis>No</emphasis> confíe en ningún comportamiento observado, ya que puede
cambiar sin previo aviso.
</simpara>
</caution>
</sect3>
</sect2>
</sect1>
<!-- Keep this comment at the end of the file
Local variables:
mode: sgml
sgml-omittag:t
sgml-shorttag:t
sgml-minimize-attributes:nil
sgml-always-quote-attributes:t
sgml-indent-step:1
sgml-indent-data:t
indent-tabs-mode:nil
sgml-parent-document:nil
sgml-default-dtd-file:"~/.phpdoc/manual.ced"
sgml-exposed-tags:nil
sgml-local-catalogs:nil
sgml-local-ecat-files:nil
End:
vim600: syn=xml fen fdm=syntax fdl=2 si
vim: et tw=78 syn=sgml
vi: ts=1 sw=1
-->