<?php
include_once $_SERVER['DOCUMENT_ROOT'] . '/include/shared-manual.inc';
$TOC = array();
$TOC_DEPRECATED = 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 => 'de',
  ),
  'this' => 
  array (
    0 => 'language.types.integer.php',
    1 => 'Ganzzahlen (Integer)',
    2 => 'Ganzzahlen (Integer)',
  ),
  'up' => 
  array (
    0 => 'language.types.php',
    1 => 'Typen',
  ),
  'prev' => 
  array (
    0 => 'language.types.boolean.php',
    1 => 'Booleans',
  ),
  'next' => 
  array (
    0 => 'language.types.float.php',
    1 => 'Gleitkommazahlen',
  ),
  'alternatives' => 
  array (
  ),
  'source' => 
  array (
    'lang' => 'de',
    'path' => 'language/types/integer.xml',
  ),
  'history' => 
  array (
  ),
);
$setup["toc"] = $TOC;
$setup["toc_deprecated"] = $TOC_DEPRECATED;
$setup["parents"] = $PARENTS;
manual_setup($setup);

contributors($setup);

?>
<div id="language.types.integer" class="sect1">
 <h2 class="title">Ganzzahlen (Integer)</h2>

 <p class="simpara">
  Ein <span class="type"><a href="language.types.integer.php" class="type int">int</a></span> ist eine Zahl aus der Menge
  ℤ = {..., -2, -1, 0, 1, 2, ...}.
 </p>

 <div class="sect2">
  <h3 class="title">Siehe auch</h3>
  <p class="para">
   <ul class="simplelist">
    <li><a href="language.types.float.php" class="link">Gleitkommazahlen</a></li>
    <li><a href="book.bc.php" class="link">Rechnen mit beliebiger Genauigkeit (BCMath)</a></li>
    <li><a href="book.gmp.php" class="link">Rechnen mit ganzen Zahlen mit beliebiger Genauigkeit (GMP)</a></li>
   </ul>
  </p>
 </div>

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

  <p class="simpara">
   <span class="type"><a href="language.types.integer.php" class="type Int">Int</a></span>s können in dezimaler (Basis 10), hexadezimaler (Basis 16),
   oktaler (Basis 8) oder binärer (Basis 2) Schreibweise angegeben werden. Der
   <a href="language.operators.arithmetic.php" class="link">Negationsoperator</a> kann
   verwendet werden, um einen negativen <span class="type"><a href="language.types.integer.php" class="type int">int</a></span> anzugeben.
  </p>

  <p class="para">
   Um die oktale Schreibweise zu verwenden, wird der Zahl eine
   <code class="literal">0</code> (Null) vorangestellt. Seit PHP 8.1.0 kann der oktalen
   Schreibweise auch ein <code class="literal">0o</code> oder <code class="literal">0O</code>
   vorangestellt werden. Um die hexadezimale Schreibweise zu verwenden, muss
   der Zahl <code class="literal">0x</code> vorangestellt werden, für die binäre
   Schreibweise <code class="literal">0x</code>.
  </p>

  <p class="para">
   Um die Lesbarkeit von Integer-Literalen zu verbessern, dürfen diese seit
   PHP 7.4.0 Unterstriche (<code class="literal">_</code>) zwischen den Ziffern
   enthalten. Diese Unterstriche werden von PHPs Scanner entfernt.
  </p>

  <div class="example" id="example-1">
   <p><strong>Beispiel #1 Integer-Literale</strong></p>
   <div class="example-contents">
<div class="annotation-non-interactive phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br />$a </span><span style="color: #007700">= </span><span style="color: #0000BB">1234</span><span style="color: #007700">; </span><span style="color: #FF8000">// Dezimalzahl<br /></span><span style="color: #0000BB">$a </span><span style="color: #007700">= </span><span style="color: #0000BB">0123</span><span style="color: #007700">; </span><span style="color: #FF8000">// Oktalzahl (entspricht 83 dezimal)<br /></span><span style="color: #0000BB">$a </span><span style="color: #007700">= </span><span style="color: #0000BB">0o123</span><span style="color: #007700">; </span><span style="color: #FF8000">// Oktalzahl (ab PHP 8.1.0)<br /></span><span style="color: #0000BB">$a </span><span style="color: #007700">= </span><span style="color: #0000BB">0x1A</span><span style="color: #007700">; </span><span style="color: #FF8000">// Hexadezimalzahl (entspricht 26 dezimal)<br /></span><span style="color: #0000BB">$a </span><span style="color: #007700">= </span><span style="color: #0000BB">0b11111111</span><span style="color: #007700">; </span><span style="color: #FF8000">// Binärzahl (entspricht 255 dezimal)<br /></span><span style="color: #0000BB">$a </span><span style="color: #007700">= </span><span style="color: #0000BB">1_234_567</span><span style="color: #007700">; </span><span style="color: #FF8000">// Dezimalzahl (ab PHP 7.4.0)<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
   </div>

  </div>

  <p class="para">
   Seit PHP 8.1.0 ist die Struktur für <span class="type"><a href="language.types.integer.php" class="type int">int</a></span>-Literale formal wie
   folgt definiert (vorher waren die Oktalpräfixe <code class="literal">0o</code> und
   <code class="literal">0O</code> nicht erlaubt, und vor PHP 7.4.0 waren die
   Unterstriche nicht erlaubt):
  </p>

  <div class="informalexample">
   <div class="example-contents">
<div class="annotation-interactive cdata"><pre>
dezimal     : [1-9][0-9]*(_[0-9]+)*
            | 0

hexadezimal : 0[xX][0-9a-fA-F]+(_[0-9a-fA-F]+)*

oktal       : 0[oO]?[0-7]+(_[0-7]+)*

binär       : 0[bB][01]+(_[01]+)*

ganzzahlig  : dezimal
            | hexadezimal
            | oktal
            | binär
</pre></div>
   </div>

  </div>

  <p class="para">
   Die Größe eines Werts vom Typ <span class="type"><a href="language.types.integer.php" class="type int">int</a></span> ist plattformabhängig, wobei
   der Maximalwert normalerweise bei etwa zwei Milliarden liegt (das sind 32
   Bit mit Vorzeichen). Bei 64-Bit-Plattformen liegt der Maximalwert
   normalerweise bei etwa 9E18. PHP unterstützt keine vorzeichenlosen
   <span class="type"><a href="language.types.integer.php" class="type int">int</a></span>s. Die Größe von <span class="type"><a href="language.types.integer.php" class="type int">int</a></span> kann mit der Konstante
   <strong><code><a href="reserved.constants.php#constant.php-int-size">PHP_INT_SIZE</a></code></strong> ermittelt werden, der maximale Wert mit
   der Konstante <strong><code><a href="reserved.constants.php#constant.php-int-max">PHP_INT_MAX</a></code></strong> und der minimale Wert mit
   der Konstante <strong><code><a href="reserved.constants.php#constant.php-int-min">PHP_INT_MIN</a></code></strong>.
  </p>
 </div>

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

  <p class="para">
   Wenn eine Zahl außerhalb der Grenzen des Typs <span class="type"><a href="language.types.integer.php" class="type int">int</a></span> liegt,
   interpretiert PHP sie stattdessen als <span class="type"><a href="language.types.float.php" class="type float">float</a></span>. Auch eine
   Operation, die eine Zahl außerhalb der Grenzen des Typs <span class="type"><a href="language.types.integer.php" class="type int">int</a></span>
   ergibt, gibt stattdessen einen <span class="type"><a href="language.types.float.php" class="type Float">Float</a></span> zurück.
  </p>

  <div class="example" id="example-2">
   <p><strong>Beispiel #2 Integer-Überlauf</strong></p>
   <div class="example-contents">
<div class="annotation-interactive phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br />$large_number </span><span style="color: #007700">= </span><span style="color: #0000BB">50000000000000000000</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">);         </span><span style="color: #FF8000">// float(5.0E+19)<br /><br /></span><span style="color: #0000BB">var_dump</span><span style="color: #007700">(</span><span style="color: #0000BB">PHP_INT_MAX </span><span style="color: #007700">+ </span><span style="color: #0000BB">1</span><span style="color: #007700">);       </span><span style="color: #FF8000">// 32-bit-System: float(2147483648)<br />                                 // 64-bit-System: float(9.2233720368548E+18)<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
   </div>

  </div>
 </div>

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

  <p class="para">
   In PHP gibt es keinen Operator für die Division von <span class="type"><a href="language.types.integer.php" class="type int">int</a></span>. Dafür
   kann die Funktion <span class="function"><a href="function.intdiv.php" class="function">intdiv()</a></span> verwendet werden. Das
   Ergebnis von <code class="literal">1/2</code> ist der <span class="type"><a href="language.types.float.php" class="type Float">Float</a></span>-Wert
   <code class="literal">0.5</code>. Der Wert kann in einen <span class="type"><a href="language.types.integer.php" class="type int">int</a></span> umgewandelt
   werden, um ihn auf Null zu runden. Alternativ dazu kann die Funktion
   <span class="function"><a href="function.round.php" class="function">round()</a></span> verwendet werden, die eine feinere Kontrolle
   über das Runden ermöglicht.
  </p>

  <div class="example" id="example-3">
   <p><strong>Beispiel #3 Divisionen</strong></p>
   <div class="example-contents">
<div class="annotation-interactive 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">);         </span><span style="color: #FF8000">// float(3.5714285714286)<br /></span><span style="color: #0000BB">var_dump</span><span style="color: #007700">((int) (</span><span style="color: #0000BB">25</span><span style="color: #007700">/</span><span style="color: #0000BB">7</span><span style="color: #007700">)); </span><span style="color: #FF8000">// 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">));  </span><span style="color: #FF8000">// float(4)<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
   </div>

  </div>
 </div>

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

  <p class="simpara">
   Um einen Wert explizit in <span class="type"><a href="language.types.integer.php" class="type int">int</a></span> umzuwandeln, kann der
   <code class="literal">(int)</code>-Cast verwendet werden. In den meisten Fällen ist
   das jedoch nicht nötig, weil ein Wert automatisch umgewandelt wird, wenn
   ein Operator, eine Funktion oder eine Kontrollstruktur ein Argument vom
   Typ <span class="type"><a href="language.types.integer.php" class="type int">int</a></span> benötigt. Ein Wert kann auch mit der Funktion 
   <span class="function"><a href="function.intval.php" class="function">intval()</a></span> in <span class="type"><a href="language.types.integer.php" class="type int">int</a></span> umgewandelt werden.
  </p>

  <p class="simpara">
   Wenn eine <span class="type">Ressource</span> in <span class="type"><a href="language.types.integer.php" class="type int">int</a></span> umgewandelt wird, dann
   ist das Ergebnis die eindeutige Nummer der Ressource, die der
   <span class="type">Ressource</span> von PHP zur Laufzeit zugewiesen wird.
  </p>

  <p class="simpara">
   Siehe auch <a href="language.types.type-juggling.php" class="link">Typumwandlung</a>.
  </p>

  <div class="sect3" id="language.types.integer.casting.from-boolean">
   <h4 class="title">Von <a href="language.types.boolean.php" class="link">Booleans</a></h4>

   <p class="simpara">
    <strong><code><a href="reserved.constants.php#constant.false">false</a></code></strong> ergibt <code class="literal">0</code> (Null) und <strong><code><a href="reserved.constants.php#constant.true">true</a></code></strong> ergibt
    <code class="literal">1</code> (Eins).
   </p>
  </div>

  <div class="sect3" id="language.types.integer.casting.from-float">
   <h4 class="title">
    Von <a href="language.types.float.php" class="link">Gleitkommazahlen</a>
   </h4>

   <p class="simpara">
    Bei der Umwandlung von <span class="type"><a href="language.types.float.php" class="type float">float</a></span> nach <span class="type"><a href="language.types.integer.php" class="type int">int</a></span> wird die
    Zahl <em>abgerundet</em>. Seit PHP 8.1.0 wird davon abgeraten,
    einen nicht-ganzzahligen <a href="language.types.float.php" class="link">Float</a> in <a href="language.types.integer.php" class="link">Integer</a> umzuwandeln, weil dabei die
    Genauigkeit abnimmt.
   </p>

   <div class="example" id="example-4">
    <p><strong>Beispiel #4 Umwandlung von Float</strong></p>
    <div class="example-contents">
<div class="annotation-interactive phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br /><br /></span><span style="color: #007700">function </span><span style="color: #0000BB">foo</span><span style="color: #007700">(</span><span style="color: #0000BB">$value</span><span style="color: #007700">): </span><span style="color: #0000BB">int </span><span style="color: #007700">{<br />  return </span><span style="color: #0000BB">$value</span><span style="color: #007700">;<br />}<br /><br /></span><span style="color: #0000BB">var_dump</span><span style="color: #007700">(</span><span style="color: #0000BB">foo</span><span style="color: #007700">(</span><span style="color: #0000BB">8.1</span><span style="color: #007700">)); </span><span style="color: #FF8000">// seit PHP 8.1.0: "Deprecated: Implicit conversion from float 8.1 to int loses precision"<br /></span><span style="color: #0000BB">var_dump</span><span style="color: #007700">(</span><span style="color: #0000BB">foo</span><span style="color: #007700">(</span><span style="color: #0000BB">8.1</span><span style="color: #007700">)); </span><span style="color: #FF8000">// bis PHP 8.1.0: 8<br /></span><span style="color: #0000BB">var_dump</span><span style="color: #007700">(</span><span style="color: #0000BB">foo</span><span style="color: #007700">(</span><span style="color: #0000BB">8.0</span><span style="color: #007700">)); </span><span style="color: #FF8000">// in beiden Fällen 8<br /><br /></span><span style="color: #0000BB">var_dump</span><span style="color: #007700">((int) </span><span style="color: #0000BB">8.1</span><span style="color: #007700">); </span><span style="color: #FF8000">// in beiden Fällen 8<br /></span><span style="color: #0000BB">var_dump</span><span style="color: #007700">(</span><span style="color: #0000BB">intval</span><span style="color: #007700">(</span><span style="color: #0000BB">8.1</span><span style="color: #007700">)); </span><span style="color: #FF8000">// in beiden Fällen 8<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
    </div>

   </div>

   <p class="para">
    Wenn der Float-Wert außerhalb der Grenzen von <span class="type"><a href="language.types.integer.php" class="type int">int</a></span> liegt (auf
    32-bit-Plattformen normalerweise <code class="literal">+/- 2.15e+9 = 2^31</code> und
    auf 64-bit-Plattformen <code class="literal">+/- 9.22e+18 = 2^63</code>), ist das
    Ergebnis undefiniert. Das liegt daran, dass der Typ <span class="type"><a href="language.types.float.php" class="type float">float</a></span>
    nicht genau genug ist, um ein exaktes Ergebnis für den Typ
    <span class="type"><a href="language.types.integer.php" class="type int">int</a></span> zu liefern. In diesem Fall wird keine Warnung und nicht
    einmal ein Hinweis ausgegeben!
   </p>

   <blockquote class="note"><p><strong class="note">Hinweis</strong>: 
    <p class="para">
     Wenn <code class="literal">NaN</code>, <code class="literal">Inf</code> und
     <code class="literal">-Inf</code> in <span class="type"><a href="language.types.integer.php" class="type int">int</a></span> umgewandelt werden, ergibt
     dies immer Null.
    </p>
   </p></blockquote>

   <div class="warning"><strong class="warning">Warnung</strong>
    <p class="para">
     Eine unbekannte Bruchzahl sollte niemals in <span class="type"><a href="language.types.integer.php" class="type int">int</a></span> umgewandelt
     werden, weil dies manchmal zu unerwarteten Ergebnissen führen kann.
    </p>

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

    </div>

    <p class="para">
     Siehe auch den
     <a href="language.types.float.php#warn.float-precision" class="link">Warnhinweis zur Genauigkeit von Gleitkommazahlen</a>.
    </p>
   </div>
  </div>

  <div class="sect3" id="language.types.integer.casting.from-string">
   <h4 class="title">Von einer Zeichenkette</h4>

   <p class="simpara">
    Wenn eine Zeichenkette
    <a href="language.types.numeric-strings.php" class="link">numerisch</a> ist oder
    numerisch beginnt, wird sie in den entsprechenden Integer-Wert umgewandelt,
    andernfalls wird sie in Null (<code class="literal">0</code>) umgewandelt.
   </p>
  </div>

  <div class="sect3" id="language.types.integer.casting-from-null">
   <h4 class="title">Von <span class="type"><a href="language.types.null.php" class="type NULL">NULL</a></span></h4>

   <p class="simpara">
    <strong><code><a href="reserved.constants.php#constant.null">null</a></code></strong> wird immer in Null (<code class="literal">0</code>) umgewandelt.
   </p>
  </div>

  <div class="sect3" id="language.types.integer.casting.from-other">
   <h4 class="title">Von anderen Typen</h4>

   <div class="caution"><strong class="caution">Achtung</strong>
    <p class="simpara">
     Für andere Typen ist das Verhalten bei der Umwandlung in <span class="type"><a href="language.types.integer.php" class="type int">int</a></span>
     undefiniert. Es ist nicht empfehlenswert, sich auf ein beobachtetes
     Verhalten zu verlassen, da es sich ohne Vorankündigung ändern kann.
    </p>
   </div>
  </div>

 </div>
</div><?php manual_footer($setup); ?>