downloads | documentation | faq | getting help | mailing lists | licenses | wiki | reporting bugs | php.net sites | links | conferences | my php.net

search for in the

Our source is open

The syntax highlighted source is automatically generated by PHP from the plaintext script. If you're interested in what's behind the several functions we used, you can always take a look at the source of the following files:

Of course, if you want to see the source of this page, we have it available. You can also browse the SVN repository for this website on svn.php.net.

Source of: /manual/en/language.types.integer.php

<?php
include_once $_SERVER['DOCUMENT_ROOT'] . '/include/shared-manual.inc';
$TOC = array();
$PARENTS = array();
include_once
dirname(__FILE__) ."/toc/language.types.inc";
$setup = array (
 
'home' =>
  array (
   
0 => 'index.php',
   
1 => 'PHP Manual',
  ),
 
'head' =>
  array (
   
0 => 'UTF-8',
   
1 => 'en',
  ),
 
'this' =>
  array (
   
0 => 'language.types.integer.php',
   
1 => 'Integers',
  ),
 
'up' =>
  array (
   
0 => 'language.types.php',
   
1 => 'Types',
  ),
 
'prev' =>
  array (
   
0 => 'language.types.boolean.php',
   
1 => 'Booleans',
  ),
 
'next' =>
  array (
   
0 => 'language.types.float.php',
   
1 => 'Floating point numbers',
  ),
);
$setup["toc"] = $TOC;
$setup["parents"] = $PARENTS;
manual_setup($setup);

manual_header();
?>
<div id="language.types.integer" class="sect1">
 <h2 class="title">Integers</h2>
 
 <p class="simpara">
  An <a href="language.types.integer.php" class="type integer">integer</a> is a number of the set
  Z = {..., -2, -1, 0, 1, 2, ...}.
 </p>
 
 <p class="para">
  See also:
 </p>

 <ul class="itemizedlist">
  <li class="listitem">
   <span class="simpara">
    <a href="ref.gmp.php" class="link">Arbitrary length integer / GMP</a>
   </span>
  </li>
  <li class="listitem">
   <span class="simpara">
    <a href="language.types.float.php" class="link">Floating point numbers</a>
   </span>
  </li>
  <li class="listitem">
   <span class="simpara">
    <a href="ref.bc.php" class="link">Arbitrary precision / BCMath</a>
   </span>
  </li>
 </ul>

 <div id="language.types.integer.syntax" class="sect2">
  <h3 class="title">Syntax</h3>

  <p class="simpara">
   <a href="language.types.integer.php" class="type Integer">Integer</a>s can be specified in decimal (base 10), hexadecimal
   (base 16), or octal (base 8) notation, optionally preceded by a sign
   (- or +).
  </p>

  <p class="para">
   To use octal notation, precede the number with a <i>0</i> (zero).
   To use hexadecimal notation precede the number with <i>0x</i>.
  </p>

  <div class="example">
   <p><b>Example #1 Integer literals</b></p>
   <div class="example-contents programlisting">
<div class="phpcode"><code><span style="color: #000000">
<span style="color: #0000BB">&lt;?php<br />$a&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">1234</span><span style="color: #007700">;&nbsp;</span><span style="color: #FF8000">//&nbsp;decimal&nbsp;number<br /></span><span style="color: #0000BB">$a&nbsp;</span><span style="color: #007700">=&nbsp;-</span><span style="color: #0000BB">123</span><span style="color: #007700">;&nbsp;</span><span style="color: #FF8000">//&nbsp;a&nbsp;negative&nbsp;number<br /></span><span style="color: #0000BB">$a&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">0123</span><span style="color: #007700">;&nbsp;</span><span style="color: #FF8000">//&nbsp;octal&nbsp;number&nbsp;(equivalent&nbsp;to&nbsp;83&nbsp;decimal)<br /></span><span style="color: #0000BB">$a&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">0x1A</span><span style="color: #007700">;&nbsp;</span><span style="color: #FF8000">//&nbsp;hexadecimal&nbsp;number&nbsp;(equivalent&nbsp;to&nbsp;26&nbsp;decimal)<br /></span><span style="color: #0000BB">?&gt;</span>
</span>
</code></div>
   </div>

  </div>

  <p class="para">
   Formally, the structure for <a href="language.types.integer.php" class="type integer">integer</a> literals is:
  </p>
 
  <div class="informalexample">
   <div class="example-contents programlisting">
<div class="cdata"><pre>
decimal     : [1-9][0-9]*
            | 0

hexadecimal : 0[xX][0-9a-fA-F]+

octal       : 0[0-7]+

integer     : [+-]?decimal
            | [+-]?hexadecimal
            | [+-]?octal
</pre></div>
   </div>

  </div>

  <p class="para">
   The size of an <a href="language.types.integer.php" class="type integer">integer</a> is platform-dependent, although a maximum
   value of about two billion is the usual value (that&#039;s 32 bits signed).
   64-bits platforms usually have the maximum value of about 9E18. PHP
   does not support unsigned <a href="language.types.integer.php" class="type integer">integer</a>s. <a href="language.types.integer.php" class="type Integer">Integer</a> size
   can be determined using the constant <b><tt class="constant">PHP_INT_SIZE</tt></b>, and
   maximum value using the constant <b><tt class="constant">PHP_INT_MAX</tt></b> since
   PHP 4.4.0 and PHP 5.0.5.
  </p>

  <div class="warning"><b class="warning">Warning</b>
   <p class="para">
    If an invalid digit is given in an octal <a href="language.types.integer.php" class="type integer">integer</a> (i.e. 8 or 9),
    the rest of the number is ignored.
   </p>

   <div class="example">
    <p><b>Example #2 Octal weirdness</b></p>
    <div class="example-contents programlisting">
<div class="phpcode"><code><span style="color: #000000">
<span style="color: #0000BB">&lt;?php<br />var_dump</span><span style="color: #007700">(</span><span style="color: #0000BB">01090</span><span style="color: #007700">);&nbsp;</span><span style="color: #FF8000">//&nbsp;010&nbsp;octal&nbsp;=&nbsp;8&nbsp;decimal<br /></span><span style="color: #0000BB">?&gt;</span>
</span>
</code></div>
    </div>

   </div>
  </div>
 </div>

 <div id="language.types.integer.overflow" class="sect2">
  <h3 class="title">Integer overflow</h3>

  <p class="para">
   If PHP encounters a number beyond the bounds of the <a href="language.types.integer.php" class="type integer">integer</a>
   type, it will be interpreted as a <a href="language.types.float.php" class="type float">float</a> instead. Also, an
   operation which results in a number beyond the bounds of the
   <a href="language.types.integer.php" class="type integer">integer</a> type will return a <a href="language.types.float.php" class="type float">float</a> instead.
  </p>

  <div class="informalexample">
   <div class="example-contents programlisting">
<div class="phpcode"><code><span style="color: #000000">
<span style="color: #0000BB">&lt;?php<br />$large_number&nbsp;</span><span style="color: #007700">=&nbsp;&nbsp;</span><span style="color: #0000BB">2147483647</span><span style="color: #007700">;<br /></span><span style="color: #0000BB">var_dump</span><span style="color: #007700">(</span><span style="color: #0000BB">$large_number</span><span style="color: #007700">);<br /></span><span style="color: #FF8000">//&nbsp;output:&nbsp;int(2147483647)<br /><br /></span><span style="color: #0000BB">$large_number&nbsp;</span><span style="color: #007700">=&nbsp;&nbsp;</span><span style="color: #0000BB">2147483648</span><span style="color: #007700">;<br /></span><span style="color: #0000BB">var_dump</span><span style="color: #007700">(</span><span style="color: #0000BB">$large_number</span><span style="color: #007700">);<br /></span><span style="color: #FF8000">//&nbsp;output:&nbsp;float(2147483648)<br /><br />//&nbsp;it's&nbsp;true&nbsp;also&nbsp;for&nbsp;hexadecimal&nbsp;specified&nbsp;integers&nbsp;between&nbsp;2^31&nbsp;and&nbsp;2^32-1:<br /></span><span style="color: #0000BB">var_dump</span><span style="color: #007700">(&nbsp;</span><span style="color: #0000BB">0xffffffff&nbsp;</span><span style="color: #007700">);<br /></span><span style="color: #FF8000">//&nbsp;output:&nbsp;float(4294967295)<br /><br />//&nbsp;this&nbsp;doesn't&nbsp;go&nbsp;for&nbsp;hexadecimal&nbsp;specified&nbsp;integers&nbsp;above&nbsp;2^32-1:<br /></span><span style="color: #0000BB">var_dump</span><span style="color: #007700">(&nbsp;</span><span style="color: #0000BB">0x100000000&nbsp;</span><span style="color: #007700">);<br /></span><span style="color: #FF8000">//&nbsp;output:&nbsp;int(2147483647)<br /><br /></span><span style="color: #0000BB">$million&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">1000000</span><span style="color: #007700">;<br /></span><span style="color: #0000BB">$large_number&nbsp;</span><span style="color: #007700">=&nbsp;&nbsp;</span><span style="color: #0000BB">50000&nbsp;</span><span style="color: #007700">*&nbsp;</span><span style="color: #0000BB">$million</span><span style="color: #007700">;<br /></span><span style="color: #0000BB">var_dump</span><span style="color: #007700">(</span><span style="color: #0000BB">$large_number</span><span style="color: #007700">);<br /></span><span style="color: #FF8000">//&nbsp;output:&nbsp;float(50000000000)<br /></span><span style="color: #0000BB">?&gt;</span>
</span>
</code></div>
   </div>

  </div>

  <div class="warning"><b class="warning">Warning</b>
   <p class="simpara">
    Unfortunately, there was a bug in PHP which caused this to not always work
    correctly when negative numbers were involved. For example, the result of
    <i>-50000 * $million</i> is <i>-429496728</i>.
    However, when both operands were positive, there was no problem.
   </p>

   <p class="simpara">
    This was fixed in PHP 4.1.0.
   </p>
  </div>
 
  <p class="para">
   There is no <a href="language.types.integer.php" class="type integer">integer</a> division operator in PHP.
   <i>1/2</i> yields the <a href="language.types.float.php" class="type float">float</a> <i>0.5</i>.
   The value can be casted to an <a href="language.types.integer.php" class="type integer">integer</a> to round it downwards, or
   the <a href="function.round.php" class="function">round()</a> function provides finer control over rounding.
  </p>

  <div class="informalexample">
   <div class="example-contents programlisting">
<div class="phpcode"><code><span style="color: #000000">
<span style="color: #0000BB">&lt;?php<br />var_dump</span><span style="color: #007700">(</span><span style="color: #0000BB">25</span><span style="color: #007700">/</span><span style="color: #0000BB">7</span><span style="color: #007700">);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #FF8000">//&nbsp;float(3.5714285714286)&nbsp;<br /></span><span style="color: #0000BB">var_dump</span><span style="color: #007700">((int)&nbsp;(</span><span style="color: #0000BB">25</span><span style="color: #007700">/</span><span style="color: #0000BB">7</span><span style="color: #007700">));&nbsp;</span><span style="color: #FF8000">//&nbsp;int(3)<br /></span><span style="color: #0000BB">var_dump</span><span style="color: #007700">(</span><span style="color: #0000BB">round</span><span style="color: #007700">(</span><span style="color: #0000BB">25</span><span style="color: #007700">/</span><span style="color: #0000BB">7</span><span style="color: #007700">));&nbsp;&nbsp;</span><span style="color: #FF8000">//&nbsp;float(4)&nbsp;<br /></span><span style="color: #0000BB">?&gt;</span>
</span>
</code></div>
   </div>

  </div>
 </div>

 <div id="language.types.integer.casting" class="sect2">
  <h3 class="title">Converting to integer</h3>

  <p class="simpara">
   To explicitly convert a value to <a href="language.types.integer.php" class="type integer">integer</a>, use either the
   <i>(int)</i> or <i>(integer)</i> casts. However, in
   most cases the cast is not needed, since a value will be automatically
   converted if an operator, function or control structure requires an
   <a href="language.types.integer.php" class="type integer">integer</a> argument. A value can also be converted to
   <a href="language.types.integer.php" class="type integer">integer</a> with the <a href="function.intval.php" class="function">intval()</a> function.
  </p>

  <p class="simpara">
   See also: <a href="language.types.type-juggling.php" class="link">type-juggling</a>.
  </p>
  
  <div id="language.types.integer.casting.from-boolean" class="sect3">
   <h4 class="title">From <a href="language.types.boolean.php" class="link">booleans</a></h4>

   <p class="simpara">
    <b><tt class="constant">FALSE</tt></b> will yield <i>0</i> (zero), and <b><tt class="constant">TRUE</tt></b> will yield
    <i>1</i> (one).
   </p>
  </div>

  <div id="language.types.integer.casting.from-float" class="sect3">
   <h4 class="title">
    From <a href="language.types.float.php" class="link">floating point numbers</a>
   </h4>

   <p class="simpara">
    When converting from <a href="language.types.float.php" class="type float">float</a> to <a href="language.types.integer.php" class="type integer">integer</a>, the number
    will be rounded <em class="emphasis">towards zero</em>.
   </p>
   
   <p class="para">
    If the float is beyond the boundaries of <a href="language.types.integer.php" class="type integer">integer</a> (usually
    <i>+/- 2.15e+9 = 2^31</i>), the result is undefined, since the
    <a href="language.types.float.php" class="type float">float</a> doesn&#039;t have enough precision to give an exact
    <a href="language.types.integer.php" class="type integer">integer</a> result. No warning, not even a notice will be issued
    when this happens!
   </p>
   
   <div class="warning"><b class="warning">Warning</b>
    <p class="para">
     Never cast an unknown fraction to <a href="language.types.integer.php" class="type integer">integer</a>, as this can
     sometimes lead to unexpected results.
    </p>

    <div class="informalexample">
     <div class="example-contents programlisting">
<div class="phpcode"><code><span style="color: #000000">
<span style="color: #0000BB">&lt;?php<br /></span><span style="color: #007700">echo&nbsp;(int)&nbsp;(&nbsp;(</span><span style="color: #0000BB">0.1</span><span style="color: #007700">+</span><span style="color: #0000BB">0.7</span><span style="color: #007700">)&nbsp;*&nbsp;</span><span style="color: #0000BB">10&nbsp;</span><span style="color: #007700">);&nbsp;</span><span style="color: #FF8000">//&nbsp;echoes&nbsp;7!<br /></span><span style="color: #0000BB">?&gt;</span>
</span>
</code></div>
     </div>

    </div>
   
    <p class="para">
     See also the <a href="language.types.float.php#warn.float-precision" class="link">warning about float
     precision</a>.
    </p>
   </div>
  </div>
  
  <div id="language.types.integer.casting.from-string" class="sect3">
   <h4 class="title">From strings</h4>

   <p class="simpara">
    See <a href="language.types.string.php#language.types.string.conversion" class="link">String conversion to
    numbers</a>
   </p>
  </div>
  
  <div id="language.types.integer.casting.from-other" class="sect3">
   <h4 class="title">From other types</h4>

   <div class="caution"><b class="caution">Caution</b>
    <p class="simpara">
     The behaviour of converting to <a href="language.types.integer.php" class="type integer">integer</a> is undefined for other
     types. Do <em class="emphasis">not</em> rely on any observed behaviour, as it
     can change without notice.
    </p>
   </div>
  </div>

 </div>
</div><?php manual_footer(); ?>
 
show source | credits | sitemap | contact | advertising | mirror sites