<?php
include_once $_SERVER['DOCUMENT_ROOT'] . '/include/shared-manual.inc';
$TOC = array();
$TOC_DEPRECATED = array();
$PARENTS = array();
include_once dirname(__FILE__) ."/toc/language.operators.inc";
$setup = array (
  'home' => 
  array (
    0 => 'index.php',
    1 => 'PHP Manual',
  ),
  'head' => 
  array (
    0 => 'UTF-8',
    1 => 'de',
  ),
  'this' => 
  array (
    0 => 'language.operators.bitwise.php',
    1 => 'Bit',
    2 => 'Bit-Operatoren',
  ),
  'up' => 
  array (
    0 => 'language.operators.php',
    1 => 'Operatoren',
  ),
  'prev' => 
  array (
    0 => 'language.operators.assignment.php',
    1 => 'Zuweisung',
  ),
  'next' => 
  array (
    0 => 'language.operators.comparison.php',
    1 => 'Vergleich',
  ),
  'alternatives' => 
  array (
  ),
  'source' => 
  array (
    'lang' => 'de',
    'path' => 'language/operators/bitwise.xml',
  ),
  'history' => 
  array (
  ),
);
$setup["toc"] = $TOC;
$setup["toc_deprecated"] = $TOC_DEPRECATED;
$setup["parents"] = $PARENTS;
manual_setup($setup);

contributors($setup);

?>
<div id="language.operators.bitwise" class="sect1">
 <h2 class="title">Bit-Operatoren</h2>

 <p class="simpara">
  Bit-Operatoren erlauben es die Prüfung und Manipulation von bestimmten Bits
  in einem Integer.
 </p>
 <table class="doctable table">
  <caption><strong>Bit-Operatoren</strong></caption>
  
   <thead>
    <tr>
     <th>Beispiel</th>
     <th>Name</th>
     <th>Ergebnis</th>
    </tr>

   </thead>

   <tbody class="tbody">
    <tr>
     <td><strong class="userinput"><code>$a &amp; $b</code></strong></td>
     <td>And (Und)</td>
     <td>
      Bits, die in <var class="varname">$a</var> und <var class="varname">$b</var> gesetzt
      sind, werden gesetzt.
     </td>
    </tr>

    <tr>
     <td><strong class="userinput"><code>$a | $b</code></strong></td>
     <td>Or (inklusives Oder)</td>
     <td>
      Bits, die in <var class="varname">$a</var> oder <var class="varname">$b</var> gesetzt
      sind, werden gesetzt.
     </td>
    </tr>

    <tr>
     <td><strong class="userinput"><code>$a ^ $b</code></strong></td>
     <td>Xor (exklusives Oder)</td>
     <td>
      Bits, die entweder in <var class="varname">$a</var> oder <var class="varname">$b</var>,
      jedoch nicht in beiden gesetzt sind, werden gesetzt.
     </td>
    </tr>

    <tr>
     <td><strong class="userinput"><code>~ $a</code></strong></td>
     <td>Not (Nicht)</td>
     <td>
      Bits, die in <var class="varname">$a</var> nicht gesetzt sind, werden gesetzt,
      und umgekehrt.
     </td>
    </tr>

    <tr>
     <td><strong class="userinput"><code>$a &lt;&lt; $b</code></strong></td>
     <td>Nach links verschieben</td>
     <td>
      Verschiebung der Bits von <var class="varname">$a</var> um <var class="varname">$b</var>
      Stellen nach links (jede Stelle entspricht einer Mulitplikation mit
      zwei).
     </td>
    </tr>

    <tr>
     <td><strong class="userinput"><code>$a &gt;&gt; $b</code></strong></td>
     <td>Nach rechts verschieben</td>
     <td>
      Verschiebung der Bits von <var class="varname">$a</var> um <var class="varname">$b</var>
      Stellen nach rechts (jede Stelle entspricht einer Division durch zwei).
     </td>
    </tr>

   </tbody>
  
 </table>

 <p class="para">
  Bit-Verschiebungen in PHP sind arithmetisch. Bits, die an einem der Enden
  herausgeschoben werden, werden verworfen. Bei Links-Verschiebungen werden
  von rechts Nullen hereingeschoben, während das Vorzeichenbit links
  herausgeschoben wird, was bedeutet, dass das Vorzeichen des Operanden nicht
  erhalten bleibt. Bei Rechts-Verschiebungen werden Kopien des Vorzeichenbits
  von links hereingeschoben, sodass das Vorzeichen des Operanden erhalten
  bleibt.
 </p>
 <p class="para">
  Klammern sind zu verwenden, um die gewünschte
  <a href="language.operators.precedence.php" class="link">Rangfolge</a>
  sicherzustellen. Beispielsweise wird bei <code class="literal">$a &amp; $b ==
  true</code> zunächst der Vergleich ausgewertet, und erst dann das
  Bit-Und, während bei <code class="literal">($a &amp; $b) == true</code> zunächst das
  Bit-Und, und erst dann der Vergleich ausgewertet wird.
 </p>
 <p class="para">
  Sind beide Operanden der <code class="literal">&amp;</code>, <code class="literal">|</code> und
  <code class="literal">^</code> Operatoren Zeichenketten, dann wird die Operation auf
  den ASCII-Werten der Zeichen der Zeichenketten durchgeführt, und das
  Ergebnis ist wiederum eine Zeichenkette. In allen anderen Fällen werden
  beide Operanden
  <a href="language.types.integer.php#language.types.integer.casting" class="link">nach Integer umgewandelt</a>
  und das Ergebnis ist eine Ganzzahl.
 </p>
 <p class="para">
  Ist der Operand des <code class="literal">~</code> Operators eine Zeichenkette, dann
  wird die Operation auf den ASCII-Werten der Zeichen der Zeichenkette
  durchgeführt, Und das Ergebnis ist wiederum eine Zeichenkette. Andernfalls
  werden Operand und Ergebnis als Ganzzahl behandelt.
 </p>
 <p class="para">
  Beide Operanden und das Ergebnis der <code class="literal">&lt;&lt;</code> und
  <code class="literal">&gt;&gt;</code>-Operatoren werden immer als Ganzzahl behandelt.
 </p>
 <p class="para">
  Die ini-Einstellung error_reporting von PHP verwendet Bitwerte, was die
  realitätsnahe Demonstration des Ausschaltens einzelner Bits bietet. Um alle
  Fehler außer Hinweisen anzuzeigen, muss den Anweisungen der php.ini-Datei
  entsprechend verwendet werden:
  <strong class="userinput"><code>E_ALL &amp; ~E_NOTICE</code></strong>
 </p>
 <p class="para">
  <div class="informalexample">
   <p class="para">
    <pre class="literallayout">
     Dies funktioniert, indem mit E_ALL begonnen wird:
     <span class="computeroutput">00000000000000000111011111111111</span>
     Dann wird der Wert von E_NOTICE genommen...
     <span class="computeroutput">00000000000000000000000000001000</span>
     ... und dieser per <code class="literal">~</code> invertiert:
     <span class="computeroutput">11111111111111111111111111110111</span>
     Schließlich wird AND (&amp;) verwendet, um die Bits zu ermitteln, die in
     beiden Werten gesetzt sind:
     <span class="computeroutput">00000000000000000111011111110111</span>
    </pre>
   </p>
  </div>
 </p>
 <p class="para">
  Eine andere Möglichkeit dies zu bewerkstelligen, ist XOR
  (<code class="literal">^</code>) zu verwenden, um diejenigen Bits zu finden, die nur in
  einem der beiden Werte gesetzt sind: <strong class="userinput"><code>E_ALL ^ E_NOTICE</code></strong>
 </p>
 <p class="para">
  error_reporting kann ebenfalls verwendet werden, um zu zeigen, wie Bits
  gesetzt werden. Auf folgende Weise werden nur Fehler und behebbare Fehler
  angezeigt:
  <strong class="userinput"><code>E_ERROR | E_RECOVERABLE_ERROR</code></strong>
 </p>
 <p class="para">
  <div class="informalexample">
   <p class="para">
    <pre class="literallayout">
     Dieser Vorgang kombiniert E_ERROR
     <span class="computeroutput">00000000000000000000000000000001</span>
     und
     <span class="computeroutput">00000000000000000001000000000000</span>
     unter Verwendung des OR- (<code class="literal">|</code>) Operators
     um die Bits zu ermitteln, die in einem oder beiden Werten gesetzt sind:
     <span class="computeroutput">00000000000000000001000000000001</span>
    </pre>
   </p>
  </div>
 </p>
 <p class="para">
  <div class="example" id="example-1">
   <p><strong>Beispiel #1 Bitweise AND, OR und XOR Operationen mit Ganzzahlen</strong></p>
   <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: #FF8000">/*<br /> * Der erste Abschnitt kann ignoriert werden;<br /> * er dient nur zu Formatierungszwecken, um die Ausgabe deutlicher zu machen.<br /> */<br /><br /></span><span style="color: #0000BB">$format </span><span style="color: #007700">= </span><span style="color: #DD0000">'(%1$2d = %1$04b) = (%2$2d = %2$04b)'<br />      </span><span style="color: #007700">. </span><span style="color: #DD0000">' %3$s (%4$2d = %4$04b)' </span><span style="color: #007700">. </span><span style="color: #DD0000">"\n"</span><span style="color: #007700">;<br /><br />echo &lt;&lt;&lt;EOH<br /></span><span style="color: #DD0000"> ---------     ---------  -- ---------<br /> Ergebnis      Wert 1     Op Wert 2<br /> ---------     ---------  -- ---------<br /></span><span style="color: #007700">EOH;<br /><br /><br /></span><span style="color: #FF8000">/*<br /> * Hier kommen die Beispiele.<br /> */<br /><br /></span><span style="color: #0000BB">$values </span><span style="color: #007700">= array(</span><span style="color: #0000BB">0</span><span style="color: #007700">, </span><span style="color: #0000BB">1</span><span style="color: #007700">, </span><span style="color: #0000BB">2</span><span style="color: #007700">, </span><span style="color: #0000BB">4</span><span style="color: #007700">, </span><span style="color: #0000BB">8</span><span style="color: #007700">);<br /></span><span style="color: #0000BB">$test </span><span style="color: #007700">= </span><span style="color: #0000BB">1 </span><span style="color: #007700">+ </span><span style="color: #0000BB">4</span><span style="color: #007700">;<br /><br />echo </span><span style="color: #DD0000">"\n Bitweises AND \n"</span><span style="color: #007700">;<br />foreach (</span><span style="color: #0000BB">$values </span><span style="color: #007700">as </span><span style="color: #0000BB">$value</span><span style="color: #007700">) {<br />    </span><span style="color: #0000BB">$result </span><span style="color: #007700">= </span><span style="color: #0000BB">$value </span><span style="color: #007700">&amp; </span><span style="color: #0000BB">$test</span><span style="color: #007700">;<br />    </span><span style="color: #0000BB">printf</span><span style="color: #007700">(</span><span style="color: #0000BB">$format</span><span style="color: #007700">, </span><span style="color: #0000BB">$result</span><span style="color: #007700">, </span><span style="color: #0000BB">$value</span><span style="color: #007700">, </span><span style="color: #DD0000">'&amp;'</span><span style="color: #007700">, </span><span style="color: #0000BB">$test</span><span style="color: #007700">);<br />}<br /><br />echo </span><span style="color: #DD0000">"\n Bitweises einschließendes OR \n"</span><span style="color: #007700">;<br />foreach (</span><span style="color: #0000BB">$values </span><span style="color: #007700">as </span><span style="color: #0000BB">$value</span><span style="color: #007700">) {<br />    </span><span style="color: #0000BB">$result </span><span style="color: #007700">= </span><span style="color: #0000BB">$value </span><span style="color: #007700">| </span><span style="color: #0000BB">$test</span><span style="color: #007700">;<br />    </span><span style="color: #0000BB">printf</span><span style="color: #007700">(</span><span style="color: #0000BB">$format</span><span style="color: #007700">, </span><span style="color: #0000BB">$result</span><span style="color: #007700">, </span><span style="color: #0000BB">$value</span><span style="color: #007700">, </span><span style="color: #DD0000">'|'</span><span style="color: #007700">, </span><span style="color: #0000BB">$test</span><span style="color: #007700">);<br />}<br /><br />echo </span><span style="color: #DD0000">"\n Bitweises ausschließendes OR (XOR) \n"</span><span style="color: #007700">;<br />foreach (</span><span style="color: #0000BB">$values </span><span style="color: #007700">as </span><span style="color: #0000BB">$value</span><span style="color: #007700">) {<br />    </span><span style="color: #0000BB">$result </span><span style="color: #007700">= </span><span style="color: #0000BB">$value </span><span style="color: #007700">^ </span><span style="color: #0000BB">$test</span><span style="color: #007700">;<br />    </span><span style="color: #0000BB">printf</span><span style="color: #007700">(</span><span style="color: #0000BB">$format</span><span style="color: #007700">, </span><span style="color: #0000BB">$result</span><span style="color: #007700">, </span><span style="color: #0000BB">$value</span><span style="color: #007700">, </span><span style="color: #DD0000">'^'</span><span style="color: #007700">, </span><span style="color: #0000BB">$test</span><span style="color: #007700">);<br />}<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
   </div>

   <div class="example-contents"><p>Das oben gezeigte Beispiel erzeugt folgende Ausgabe:</p></div>
   <div class="example-contents screen">
<div class="annotation-interactive cdata"><pre>
 ---------     ---------  -- ---------
 Ergebnis      Wert 1     Op Wert 2
---------     ---------  -- ---------
 Bitweises AND
( 0 = 0000) = ( 0 = 0000) &amp; ( 5 = 0101)
( 1 = 0001) = ( 1 = 0001) &amp; ( 5 = 0101)
( 0 = 0000) = ( 2 = 0010) &amp; ( 5 = 0101)
( 4 = 0100) = ( 4 = 0100) &amp; ( 5 = 0101)
( 0 = 0000) = ( 8 = 1000) &amp; ( 5 = 0101)

 Bitweises einschließendes OR
( 5 = 0101) = ( 0 = 0000) | ( 5 = 0101)
( 5 = 0101) = ( 1 = 0001) | ( 5 = 0101)
( 7 = 0111) = ( 2 = 0010) | ( 5 = 0101)
( 5 = 0101) = ( 4 = 0100) | ( 5 = 0101)
(13 = 1101) = ( 8 = 1000) | ( 5 = 0101)

 Bitweises ausschließendes OR (XOR)
( 5 = 0101) = ( 0 = 0000) ^ ( 5 = 0101)
( 4 = 0100) = ( 1 = 0001) ^ ( 5 = 0101)
( 7 = 0111) = ( 2 = 0010) ^ ( 5 = 0101)
( 1 = 0001) = ( 4 = 0100) ^ ( 5 = 0101)
(13 = 1101) = ( 8 = 1000) ^ ( 5 = 0101)
</pre></div>
   </div>
  </div>
 </p>
 <p class="para">
  <div class="example" id="example-2">
   <p><strong>Beispiel #2 Bitweise XOR-Operationen mit Zeichenketten</strong></p>
   <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 </span><span style="color: #0000BB">12 </span><span style="color: #007700">^ </span><span style="color: #0000BB">9</span><span style="color: #007700">, </span><span style="color: #0000BB">PHP_EOL</span><span style="color: #007700">; </span><span style="color: #FF8000">// Gibt '5' aus<br /><br /></span><span style="color: #007700">echo </span><span style="color: #DD0000">"12" </span><span style="color: #007700">^ </span><span style="color: #DD0000">"9"</span><span style="color: #007700">, </span><span style="color: #0000BB">PHP_EOL</span><span style="color: #007700">; </span><span style="color: #FF8000">// Gibt das Backspace-Zeichen (ascii 8) aus<br />                          // ('1' (ascii 49)) ^ ('9' (ascii 57)) = #8<br /><br /></span><span style="color: #007700">echo </span><span style="color: #DD0000">"hallo" </span><span style="color: #007700">^ </span><span style="color: #DD0000">"hello"</span><span style="color: #007700">, </span><span style="color: #0000BB">PHP_EOL</span><span style="color: #007700">; </span><span style="color: #FF8000">// Gibt die ascii-Werte #0 #4 #0 #0 #0 aus<br />                                 // 'a' ^ 'e' = #4<br /><br /></span><span style="color: #007700">echo </span><span style="color: #0000BB">2 </span><span style="color: #007700">^ </span><span style="color: #DD0000">"3"</span><span style="color: #007700">, </span><span style="color: #0000BB">PHP_EOL</span><span style="color: #007700">; </span><span style="color: #FF8000">// Gibt 1 aus<br />                       // 2 ^ ((int) "3") == 1<br /><br /></span><span style="color: #007700">echo </span><span style="color: #DD0000">"2" </span><span style="color: #007700">^ </span><span style="color: #0000BB">3</span><span style="color: #007700">, </span><span style="color: #0000BB">PHP_EOL</span><span style="color: #007700">; </span><span style="color: #FF8000">// Gibt 1 aus<br />                       // ((int) "2") ^ 3 == 1<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
   </div>

  </div>
 </p>
 <p class="para">
  <div class="example" id="example-3">
   <p><strong>Beispiel #3 Bit-Verschiebung mit Ganzzahlen</strong></p>
   <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: #FF8000">/*<br /> * Hier kommen die Beispiele.<br /> */<br /><br /></span><span style="color: #007700">echo </span><span style="color: #DD0000">"\n--- RECHTSVERSCHIEBUNG MIT POSITIVEN GANZZAHLEN ---\n"</span><span style="color: #007700">;<br /><br /></span><span style="color: #0000BB">$val </span><span style="color: #007700">= </span><span style="color: #0000BB">4</span><span style="color: #007700">;<br /></span><span style="color: #0000BB">$places </span><span style="color: #007700">= </span><span style="color: #0000BB">1</span><span style="color: #007700">;<br /></span><span style="color: #0000BB">$res </span><span style="color: #007700">= </span><span style="color: #0000BB">$val </span><span style="color: #007700">&gt;&gt; </span><span style="color: #0000BB">$places</span><span style="color: #007700">;<br /></span><span style="color: #0000BB">p</span><span style="color: #007700">(</span><span style="color: #0000BB">$res</span><span style="color: #007700">, </span><span style="color: #0000BB">$val</span><span style="color: #007700">, </span><span style="color: #DD0000">'&gt;&gt;'</span><span style="color: #007700">, </span><span style="color: #0000BB">$places</span><span style="color: #007700">, </span><span style="color: #DD0000">'Kopie des Vorzeichenbits wird links hereingeschoben'</span><span style="color: #007700">);<br /><br /></span><span style="color: #0000BB">$val </span><span style="color: #007700">= </span><span style="color: #0000BB">4</span><span style="color: #007700">;<br /></span><span style="color: #0000BB">$places </span><span style="color: #007700">= </span><span style="color: #0000BB">2</span><span style="color: #007700">;<br /></span><span style="color: #0000BB">$res </span><span style="color: #007700">= </span><span style="color: #0000BB">$val </span><span style="color: #007700">&gt;&gt; </span><span style="color: #0000BB">$places</span><span style="color: #007700">;<br /></span><span style="color: #0000BB">p</span><span style="color: #007700">(</span><span style="color: #0000BB">$res</span><span style="color: #007700">, </span><span style="color: #0000BB">$val</span><span style="color: #007700">, </span><span style="color: #DD0000">'&gt;&gt;'</span><span style="color: #007700">, </span><span style="color: #0000BB">$places</span><span style="color: #007700">);<br /><br /></span><span style="color: #0000BB">$val </span><span style="color: #007700">= </span><span style="color: #0000BB">4</span><span style="color: #007700">;<br /></span><span style="color: #0000BB">$places </span><span style="color: #007700">= </span><span style="color: #0000BB">3</span><span style="color: #007700">;<br /></span><span style="color: #0000BB">$res </span><span style="color: #007700">= </span><span style="color: #0000BB">$val </span><span style="color: #007700">&gt;&gt; </span><span style="color: #0000BB">$places</span><span style="color: #007700">;<br /></span><span style="color: #0000BB">p</span><span style="color: #007700">(</span><span style="color: #0000BB">$res</span><span style="color: #007700">, </span><span style="color: #0000BB">$val</span><span style="color: #007700">, </span><span style="color: #DD0000">'&gt;&gt;'</span><span style="color: #007700">, </span><span style="color: #0000BB">$places</span><span style="color: #007700">, </span><span style="color: #DD0000">'Bits werden rechts herausgeschoben'</span><span style="color: #007700">);<br /><br /></span><span style="color: #0000BB">$val </span><span style="color: #007700">= </span><span style="color: #0000BB">4</span><span style="color: #007700">;<br /></span><span style="color: #0000BB">$places </span><span style="color: #007700">= </span><span style="color: #0000BB">4</span><span style="color: #007700">;<br /></span><span style="color: #0000BB">$res </span><span style="color: #007700">= </span><span style="color: #0000BB">$val </span><span style="color: #007700">&gt;&gt; </span><span style="color: #0000BB">$places</span><span style="color: #007700">;<br /></span><span style="color: #0000BB">p</span><span style="color: #007700">(</span><span style="color: #0000BB">$res</span><span style="color: #007700">, </span><span style="color: #0000BB">$val</span><span style="color: #007700">, </span><span style="color: #DD0000">'&gt;&gt;'</span><span style="color: #007700">, </span><span style="color: #0000BB">$places</span><span style="color: #007700">, </span><span style="color: #DD0000">'dasselbe Ergebnis wie oben; man kann nicht über 0 hinaus verschieben'</span><span style="color: #007700">);<br /><br /><br />echo </span><span style="color: #DD0000">"\n--- RECHTSVERSCHIEBUNG MIT NEGATIVEN GANZZAHLEN ---\n"</span><span style="color: #007700">;<br /><br /></span><span style="color: #0000BB">$val </span><span style="color: #007700">= -</span><span style="color: #0000BB">4</span><span style="color: #007700">;<br /></span><span style="color: #0000BB">$places </span><span style="color: #007700">= </span><span style="color: #0000BB">1</span><span style="color: #007700">;<br /></span><span style="color: #0000BB">$res </span><span style="color: #007700">= </span><span style="color: #0000BB">$val </span><span style="color: #007700">&gt;&gt; </span><span style="color: #0000BB">$places</span><span style="color: #007700">;<br /></span><span style="color: #0000BB">p</span><span style="color: #007700">(</span><span style="color: #0000BB">$res</span><span style="color: #007700">, </span><span style="color: #0000BB">$val</span><span style="color: #007700">, </span><span style="color: #DD0000">'&gt;&gt;'</span><span style="color: #007700">, </span><span style="color: #0000BB">$places</span><span style="color: #007700">, </span><span style="color: #DD0000">'Kopie des Vorzeichenbits wird links hereingeschoben'</span><span style="color: #007700">);<br /><br /></span><span style="color: #0000BB">$val </span><span style="color: #007700">= -</span><span style="color: #0000BB">4</span><span style="color: #007700">;<br /></span><span style="color: #0000BB">$places </span><span style="color: #007700">= </span><span style="color: #0000BB">2</span><span style="color: #007700">;<br /></span><span style="color: #0000BB">$res </span><span style="color: #007700">= </span><span style="color: #0000BB">$val </span><span style="color: #007700">&gt;&gt; </span><span style="color: #0000BB">$places</span><span style="color: #007700">;<br /></span><span style="color: #0000BB">p</span><span style="color: #007700">(</span><span style="color: #0000BB">$res</span><span style="color: #007700">, </span><span style="color: #0000BB">$val</span><span style="color: #007700">, </span><span style="color: #DD0000">'&gt;&gt;'</span><span style="color: #007700">, </span><span style="color: #0000BB">$places</span><span style="color: #007700">, </span><span style="color: #DD0000">'Bits werden rechts herausgeschoben'</span><span style="color: #007700">);<br /><br /></span><span style="color: #0000BB">$val </span><span style="color: #007700">= -</span><span style="color: #0000BB">4</span><span style="color: #007700">;<br /></span><span style="color: #0000BB">$places </span><span style="color: #007700">= </span><span style="color: #0000BB">3</span><span style="color: #007700">;<br /></span><span style="color: #0000BB">$res </span><span style="color: #007700">= </span><span style="color: #0000BB">$val </span><span style="color: #007700">&gt;&gt; </span><span style="color: #0000BB">$places</span><span style="color: #007700">;<br /></span><span style="color: #0000BB">p</span><span style="color: #007700">(</span><span style="color: #0000BB">$res</span><span style="color: #007700">, </span><span style="color: #0000BB">$val</span><span style="color: #007700">, </span><span style="color: #DD0000">'&gt;&gt;'</span><span style="color: #007700">, </span><span style="color: #0000BB">$places</span><span style="color: #007700">, </span><span style="color: #DD0000">'dasselbe Ergebnis wie oben; man kann nicht über -1 hinaus verschieben'</span><span style="color: #007700">);<br /><br /><br />echo </span><span style="color: #DD0000">"\n--- LINKSSVERSCHIEBUNG MIT POSITIVEN GANZZAHLEN ---\n"</span><span style="color: #007700">;<br /><br /></span><span style="color: #0000BB">$val </span><span style="color: #007700">= </span><span style="color: #0000BB">4</span><span style="color: #007700">;<br /></span><span style="color: #0000BB">$places </span><span style="color: #007700">= </span><span style="color: #0000BB">1</span><span style="color: #007700">;<br /></span><span style="color: #0000BB">$res </span><span style="color: #007700">= </span><span style="color: #0000BB">$val </span><span style="color: #007700">&lt;&lt; </span><span style="color: #0000BB">$places</span><span style="color: #007700">;<br /></span><span style="color: #0000BB">p</span><span style="color: #007700">(</span><span style="color: #0000BB">$res</span><span style="color: #007700">, </span><span style="color: #0000BB">$val</span><span style="color: #007700">, </span><span style="color: #DD0000">'&lt;&lt;'</span><span style="color: #007700">, </span><span style="color: #0000BB">$places</span><span style="color: #007700">, </span><span style="color: #DD0000">'Nullen werden rechts hereingeschoben'</span><span style="color: #007700">);<br /><br /></span><span style="color: #0000BB">$val </span><span style="color: #007700">= </span><span style="color: #0000BB">4</span><span style="color: #007700">;<br /></span><span style="color: #0000BB">$places </span><span style="color: #007700">= (</span><span style="color: #0000BB">PHP_INT_SIZE </span><span style="color: #007700">* </span><span style="color: #0000BB">8</span><span style="color: #007700">) - </span><span style="color: #0000BB">4</span><span style="color: #007700">;<br /></span><span style="color: #0000BB">$res </span><span style="color: #007700">= </span><span style="color: #0000BB">$val </span><span style="color: #007700">&lt;&lt; </span><span style="color: #0000BB">$places</span><span style="color: #007700">;<br /></span><span style="color: #0000BB">p</span><span style="color: #007700">(</span><span style="color: #0000BB">$res</span><span style="color: #007700">, </span><span style="color: #0000BB">$val</span><span style="color: #007700">, </span><span style="color: #DD0000">'&lt;&lt;'</span><span style="color: #007700">, </span><span style="color: #0000BB">$places</span><span style="color: #007700">);<br /><br /></span><span style="color: #0000BB">$val </span><span style="color: #007700">= </span><span style="color: #0000BB">4</span><span style="color: #007700">;<br /></span><span style="color: #0000BB">$places </span><span style="color: #007700">= (</span><span style="color: #0000BB">PHP_INT_SIZE </span><span style="color: #007700">* </span><span style="color: #0000BB">8</span><span style="color: #007700">) - </span><span style="color: #0000BB">3</span><span style="color: #007700">;<br /></span><span style="color: #0000BB">$res </span><span style="color: #007700">= </span><span style="color: #0000BB">$val </span><span style="color: #007700">&lt;&lt; </span><span style="color: #0000BB">$places</span><span style="color: #007700">;<br /></span><span style="color: #0000BB">p</span><span style="color: #007700">(</span><span style="color: #0000BB">$res</span><span style="color: #007700">, </span><span style="color: #0000BB">$val</span><span style="color: #007700">, </span><span style="color: #DD0000">'&lt;&lt;'</span><span style="color: #007700">, </span><span style="color: #0000BB">$places</span><span style="color: #007700">, </span><span style="color: #DD0000">'Vorzeichenbits werden herausgeschoben'</span><span style="color: #007700">);<br /><br /></span><span style="color: #0000BB">$val </span><span style="color: #007700">= </span><span style="color: #0000BB">4</span><span style="color: #007700">;<br /></span><span style="color: #0000BB">$places </span><span style="color: #007700">= (</span><span style="color: #0000BB">PHP_INT_SIZE </span><span style="color: #007700">* </span><span style="color: #0000BB">8</span><span style="color: #007700">) - </span><span style="color: #0000BB">2</span><span style="color: #007700">;<br /></span><span style="color: #0000BB">$res </span><span style="color: #007700">= </span><span style="color: #0000BB">$val </span><span style="color: #007700">&lt;&lt; </span><span style="color: #0000BB">$places</span><span style="color: #007700">;<br /></span><span style="color: #0000BB">p</span><span style="color: #007700">(</span><span style="color: #0000BB">$res</span><span style="color: #007700">, </span><span style="color: #0000BB">$val</span><span style="color: #007700">, </span><span style="color: #DD0000">'&lt;&lt;'</span><span style="color: #007700">, </span><span style="color: #0000BB">$places</span><span style="color: #007700">, </span><span style="color: #DD0000">'Bits werden links herausgeschoben'</span><span style="color: #007700">);<br /><br /><br />echo </span><span style="color: #DD0000">"\n--- LINKSVERSCHIEBUNG MIT NEGATIVEN GANZZAHLEN ---\n"</span><span style="color: #007700">;<br /><br /></span><span style="color: #0000BB">$val </span><span style="color: #007700">= -</span><span style="color: #0000BB">4</span><span style="color: #007700">;<br /></span><span style="color: #0000BB">$places </span><span style="color: #007700">= </span><span style="color: #0000BB">1</span><span style="color: #007700">;<br /></span><span style="color: #0000BB">$res </span><span style="color: #007700">= </span><span style="color: #0000BB">$val </span><span style="color: #007700">&lt;&lt; </span><span style="color: #0000BB">$places</span><span style="color: #007700">;<br /></span><span style="color: #0000BB">p</span><span style="color: #007700">(</span><span style="color: #0000BB">$res</span><span style="color: #007700">, </span><span style="color: #0000BB">$val</span><span style="color: #007700">, </span><span style="color: #DD0000">'&lt;&lt;'</span><span style="color: #007700">, </span><span style="color: #0000BB">$places</span><span style="color: #007700">, </span><span style="color: #DD0000">'Nullen werden rechts hereingeschoben'</span><span style="color: #007700">);<br /><br /></span><span style="color: #0000BB">$val </span><span style="color: #007700">= -</span><span style="color: #0000BB">4</span><span style="color: #007700">;<br /></span><span style="color: #0000BB">$places </span><span style="color: #007700">= (</span><span style="color: #0000BB">PHP_INT_SIZE </span><span style="color: #007700">* </span><span style="color: #0000BB">8</span><span style="color: #007700">) - </span><span style="color: #0000BB">3</span><span style="color: #007700">;<br /></span><span style="color: #0000BB">$res </span><span style="color: #007700">= </span><span style="color: #0000BB">$val </span><span style="color: #007700">&lt;&lt; </span><span style="color: #0000BB">$places</span><span style="color: #007700">;<br /></span><span style="color: #0000BB">p</span><span style="color: #007700">(</span><span style="color: #0000BB">$res</span><span style="color: #007700">, </span><span style="color: #0000BB">$val</span><span style="color: #007700">, </span><span style="color: #DD0000">'&lt;&lt;'</span><span style="color: #007700">, </span><span style="color: #0000BB">$places</span><span style="color: #007700">);<br /><br /></span><span style="color: #0000BB">$val </span><span style="color: #007700">= -</span><span style="color: #0000BB">4</span><span style="color: #007700">;<br /></span><span style="color: #0000BB">$places </span><span style="color: #007700">= (</span><span style="color: #0000BB">PHP_INT_SIZE </span><span style="color: #007700">* </span><span style="color: #0000BB">8</span><span style="color: #007700">) - </span><span style="color: #0000BB">2</span><span style="color: #007700">;<br /></span><span style="color: #0000BB">$res </span><span style="color: #007700">= </span><span style="color: #0000BB">$val </span><span style="color: #007700">&lt;&lt; </span><span style="color: #0000BB">$places</span><span style="color: #007700">;<br /></span><span style="color: #0000BB">p</span><span style="color: #007700">(</span><span style="color: #0000BB">$res</span><span style="color: #007700">, </span><span style="color: #0000BB">$val</span><span style="color: #007700">, </span><span style="color: #DD0000">'&lt;&lt;'</span><span style="color: #007700">, </span><span style="color: #0000BB">$places</span><span style="color: #007700">, </span><span style="color: #DD0000">'Bits werden links herausgeschoben, einschließlich des Vorzeichenbits'</span><span style="color: #007700">);<br /><br /><br /></span><span style="color: #FF8000">/*<br /> * Dieser Abschnitt kann ignoriert werden;<br /> * es handlet sich nur um Formatierung, um die Ausgabe deutlicher zu machen.<br /> */<br /><br /></span><span style="color: #007700">function </span><span style="color: #0000BB">p</span><span style="color: #007700">(</span><span style="color: #0000BB">$res</span><span style="color: #007700">, </span><span style="color: #0000BB">$val</span><span style="color: #007700">, </span><span style="color: #0000BB">$op</span><span style="color: #007700">, </span><span style="color: #0000BB">$places</span><span style="color: #007700">, </span><span style="color: #0000BB">$note </span><span style="color: #007700">= </span><span style="color: #DD0000">''</span><span style="color: #007700">) {<br />    </span><span style="color: #0000BB">$format </span><span style="color: #007700">= </span><span style="color: #DD0000">'%0' </span><span style="color: #007700">. (</span><span style="color: #0000BB">PHP_INT_SIZE </span><span style="color: #007700">* </span><span style="color: #0000BB">8</span><span style="color: #007700">) . </span><span style="color: #DD0000">"b\n"</span><span style="color: #007700">;<br /><br />    </span><span style="color: #0000BB">printf</span><span style="color: #007700">(</span><span style="color: #DD0000">"Ausdruck: %d = %d %s %d\n"</span><span style="color: #007700">, </span><span style="color: #0000BB">$res</span><span style="color: #007700">, </span><span style="color: #0000BB">$val</span><span style="color: #007700">, </span><span style="color: #0000BB">$op</span><span style="color: #007700">, </span><span style="color: #0000BB">$places</span><span style="color: #007700">);<br /><br />    echo </span><span style="color: #DD0000">" Dezimal:\n"</span><span style="color: #007700">;<br />    </span><span style="color: #0000BB">printf</span><span style="color: #007700">(</span><span style="color: #DD0000">"  Wert=%d\n"</span><span style="color: #007700">, </span><span style="color: #0000BB">$val</span><span style="color: #007700">);<br />    </span><span style="color: #0000BB">printf</span><span style="color: #007700">(</span><span style="color: #DD0000">"  Erg.=%d\n"</span><span style="color: #007700">, </span><span style="color: #0000BB">$res</span><span style="color: #007700">);<br /><br />    echo </span><span style="color: #DD0000">" Binär:\n"</span><span style="color: #007700">;<br />    </span><span style="color: #0000BB">printf</span><span style="color: #007700">(</span><span style="color: #DD0000">'  Wert=' </span><span style="color: #007700">. </span><span style="color: #0000BB">$format</span><span style="color: #007700">, </span><span style="color: #0000BB">$val</span><span style="color: #007700">);<br />    </span><span style="color: #0000BB">printf</span><span style="color: #007700">(</span><span style="color: #DD0000">'  Erg.=' </span><span style="color: #007700">. </span><span style="color: #0000BB">$format</span><span style="color: #007700">, </span><span style="color: #0000BB">$res</span><span style="color: #007700">);<br /><br />    if (</span><span style="color: #0000BB">$note</span><span style="color: #007700">) {<br />        echo </span><span style="color: #DD0000">" ANMERKUNG: </span><span style="color: #0000BB">$note</span><span style="color: #DD0000">\n"</span><span style="color: #007700">;<br />    }<br /><br />    echo </span><span style="color: #DD0000">"\n\n"</span><span style="color: #007700">;<br />}<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
   </div>

   <div class="example-contents"><p>Das oben gezeigte Beispiel erzeugt auf 32-Bit-Systemen folgende Ausgabe:</p></div>
   <div class="example-contents screen">
<div class="annotation-interactive cdata"><pre>

--- RECHTSVERSCHIEBUNG MIT POSITIVEN GANZZAHLEN ---
Ausdruck: 2 = 4 &gt;&gt; 1
 Dezimal:
  Wert=4
  Erg.=2
 Binär:
  Wert=00000000000000000000000000000100
  Erg.=00000000000000000000000000000010
 ANMERKUNG: Kopie des Vorzeichenbits wird links hereingeschoben

Ausdruck: 1 = 4 &gt;&gt; 2
 Dezimal:
  Wert=4
  Erg.=1
 Binär:
  Wert=00000000000000000000000000000100
  Erg.=00000000000000000000000000000001

Ausdruck: 0 = 4 &gt;&gt; 3
 Dezimal:
  Wert=4
  Erg.=0
 Binär:
  Wert=00000000000000000000000000000100
  Erg.=00000000000000000000000000000000
 ANMERKUNG: Bits werden rechts herausgeschoben

Ausdruck: 0 = 4 &gt;&gt; 4
 Dezimal:
  Wert=4
  Erg.=0
 Binär:
  Wert=00000000000000000000000000000100
  Erg.=00000000000000000000000000000000
 ANMERKUNG: dasselbe Ergebnis wie oben; man kann nicht über 0 hinaus verschieben


--- RECHTSVERSCHIEBUNG MIT NEGATIVEN GANZZAHLEN ---
Ausdruck: -2 = -4 &gt;&gt; 1
 Dezimal:
  Wert=-4
  Erg.=-2
 Binär:
  Wert=11111111111111111111111111111100
  Erg.=11111111111111111111111111111110
 ANMERKUNG: Kopie des Vorzeichenbits wird links hereingeschoben

Ausdruck: -1 = -4 &gt;&gt; 2
 Dezimal:
  Wert=-4
  Erg.=-1
 Binär:
  Wert=11111111111111111111111111111100
  Erg.=11111111111111111111111111111111
 ANMERKUNG: Bits werden rechts herausgeschoben

Ausdruck: -1 = -4 &gt;&gt; 3
 Dezimal:
  Wert=-4
  Erg.=-1
 Binär:
  Wert=11111111111111111111111111111100
  Erg.=11111111111111111111111111111111
 ANMERKUNG: dasselbe Ergebnis wie oben; man kann nicht über -1 hinaus verschieben


--- LINKSSVERSCHIEBUNG MIT POSITIVEN GANZZAHLEN ---
Ausdruck: 8 = 4 &lt;&lt; 1
 Dezimal:
  Wert=4
  Erg.=8
 Binär:
  Wert=00000000000000000000000000000100
  Erg.=00000000000000000000000000001000
 ANMERKUNG: Nullen werden rechts hereingeschoben

Ausdruck: 1073741824 = 4 &lt;&lt; 28
 Dezimal:
  Wert=4
  Erg.=1073741824
 Binär:
  Wert=00000000000000000000000000000100
  Erg.=01000000000000000000000000000000

Ausdruck: -2147483648 = 4 &lt;&lt; 29
 Dezimal:
  Wert=4
  Erg.=-2147483648
 Binär:
  Wert=00000000000000000000000000000100
  Erg.=10000000000000000000000000000000
 ANMERKUNG: Vorzeichenbits werden herausgeschoben

Ausdruck: 0 = 4 &lt;&lt; 30
 Dezimal:
  Wert=4
  Erg.=0
 Binär:
  Wert=00000000000000000000000000000100
  Erg.=00000000000000000000000000000000
 ANMERKUNG: Bits werden links herausgeschoben


--- LINKSVERSCHIEBUNG MIT NEGATIVEN GANZZAHLEN ---
Ausdruck: -8 = -4 &lt;&lt; 1
 Dezimal:
  Wert=-4
  Erg.=-8
 Binär:
  Wert=11111111111111111111111111111100
  Erg.=11111111111111111111111111111000
 ANMERKUNG: Nullen werden rechts hereingeschoben

Ausdruck: -2147483648 = -4 &lt;&lt; 29
 Dezimal:
  Wert=-4
  Erg.=-2147483648
 Binär:
  Wert=11111111111111111111111111111100
  Erg.=10000000000000000000000000000000

Ausdruck: 0 = -4 &lt;&lt; 30
 Dezimal:
  Wert=-4
  Erg.=0
 Binär:
  Wert=11111111111111111111111111111100
  Erg.=00000000000000000000000000000000
 ANMERKUNG: Bits werden links herausgeschoben, einschließlich des Vorzeichenbits
</pre></div>
   </div>
   <div class="example-contents"><p>Das oben gezeigte Beispiel erzeugt auf 64-Bit-Systemen folgende Ausgabe:</p></div>
   <div class="example-contents screen">
<div class="annotation-interactive cdata"><pre>

--- RECHTSVERSCHIEBUNG MIT POSITIVEN GANZZAHLEN ---
Ausdruck: 2 = 4 &gt;&gt; 1
 Dezimal:
  Wert=4
  Erg.=2
 Binär:
  Wert=0000000000000000000000000000000000000000000000000000000000000100
  Erg.=0000000000000000000000000000000000000000000000000000000000000010
 ANMERKUNG: Kopie des Vorzeichenbits wird links hereingeschoben

Ausdruck: 1 = 4 &gt;&gt; 2
 Dezimal:
  Wert=4
  Erg.=1
 Binär:
  Wert=0000000000000000000000000000000000000000000000000000000000000100
  Erg.=0000000000000000000000000000000000000000000000000000000000000001

Ausdruck: 0 = 4 &gt;&gt; 3
 Dezimal:
  Wert=4
  Erg.=0
 Binär:
  Wert=0000000000000000000000000000000000000000000000000000000000000100
  Erg.=0000000000000000000000000000000000000000000000000000000000000000
 ANMERKUNG: Bits werden rechts herausgeschoben

Ausdruck: 0 = 4 &gt;&gt; 4
 Dezimal:
  Wert=4
  Erg.=0
 Binär:
  Wert=0000000000000000000000000000000000000000000000000000000000000100
  Erg.=0000000000000000000000000000000000000000000000000000000000000000
 ANMERKUNG: dasselbe Ergebnis wie oben; man kann nicht über 0 hinaus verschieben


--- RECHTSVERSCHIEBUNG MIT NEGATIVEN GANZZAHLEN ---
Ausdruck: -2 = -4 &gt;&gt; 1
 Dezimal:
  Wert=-4
  Erg.=-2
 Binär:
  Wert=1111111111111111111111111111111111111111111111111111111111111100
  Erg.=1111111111111111111111111111111111111111111111111111111111111110
 ANMERKUNG: Kopie des Vorzeichenbits wird links hereingeschoben

Ausdruck: -1 = -4 &gt;&gt; 2
 Dezimal:
  Wert=-4
  Erg.=-1
 Binär:
  Wert=1111111111111111111111111111111111111111111111111111111111111100
  Erg.=1111111111111111111111111111111111111111111111111111111111111111
 ANMERKUNG: Bits werden rechts herausgeschoben

Ausdruck: -1 = -4 &gt;&gt; 3
 Dezimal:
  Wert=-4
  Erg.=-1
 Binär:
  Wert=1111111111111111111111111111111111111111111111111111111111111100
  Erg.=1111111111111111111111111111111111111111111111111111111111111111
 ANMERKUNG: dasselbe Ergebnis wie oben; man kann nicht über -1 hinaus verschieben


--- LINKSSVERSCHIEBUNG MIT POSITIVEN GANZZAHLEN ---
Ausdruck: 8 = 4 &lt;&lt; 1
 Dezimal:
  Wert=4
  Erg.=8
 Binär:
  Wert=0000000000000000000000000000000000000000000000000000000000000100
  Erg.=0000000000000000000000000000000000000000000000000000000000001000
 ANMERKUNG: Nullen werden rechts hereingeschoben

Ausdruck: 4611686018427387904 = 4 &lt;&lt; 60
 Dezimal:
  Wert=4
  Erg.=4611686018427387904
  Binär:
  Wert=0000000000000000000000000000000000000000000000000000000000000100
  Erg.=0100000000000000000000000000000000000000000000000000000000000000

Ausdruck: -9223372036854775808 = 4 &lt;&lt; 61
 Dezimal:
  Wert=4
  Erg.=-9223372036854775808
 Binär:
  Wert=0000000000000000000000000000000000000000000000000000000000000100
  Erg.=1000000000000000000000000000000000000000000000000000000000000000
 ANMERKUNG: Vorzeichenbits werden herausgeschoben

Ausdruck: 0 = 4 &lt;&lt; 62
 Dezimal:
  Wert=4
  Erg.=0
 Binär:
  Wert=0000000000000000000000000000000000000000000000000000000000000100
  Erg.=0000000000000000000000000000000000000000000000000000000000000000
 ANMERKUNG: Bits werden links herausgeschoben


--- LINKSVERSCHIEBUNG MIT NEGATIVEN GANZZAHLEN ---
Ausdruck: -8 = -4 &lt;&lt; 1
 Dezimal:
  Wert=-4
  Erg.=-8
 Binär:
  Wert=1111111111111111111111111111111111111111111111111111111111111100
  Erg.=1111111111111111111111111111111111111111111111111111111111111000
 ANMERKUNG: Nullen werden rechts hereingeschoben

Ausdruck: -9223372036854775808 = -4 &lt;&lt; 61
 Dezimal:
  Wert=-4
  Erg.=-9223372036854775808
 Binär:
  Wert=1111111111111111111111111111111111111111111111111111111111111100
  Erg.=1000000000000000000000000000000000000000000000000000000000000000

Ausdruck: 0 = -4 &lt;&lt; 62
 Dezimal:
  Wert=-4
  Erg.=0
 Binär:
  Wert=1111111111111111111111111111111111111111111111111111111111111100
  Erg.=0000000000000000000000000000000000000000000000000000000000000000
 ANMERKUNG: Bits werden links herausgeschoben, einschließlich des Vorzeichenbits
</pre></div>
   </div>
  </div>
 </p>
 <div class="warning"><strong class="warning">Warnung</strong>
  <p class="para">
   Für die bitweise Manipulation von Zahlen größer als
   <strong><code><a href="reserved.constants.php#constant.php-int-max">PHP_INT_MAX</a></code></strong> sind die Funktion der
   <a href="book.gmp.php" class="link">GMP</a>-Erweiterung zu verwenden.
  </p>
 </div>

 <div class="sect2">
  <h3 class="title">Siehe auch</h3>
  <p class="para">
   <ul class="simplelist">
    
    <li><span class="function"><a href="function.pack.php" class="function">pack()</a></span></li>
    <li><span class="function"><a href="function.unpack.php" class="function">unpack()</a></span></li>
    <li><span class="function"><a href="function.gmp-and.php" class="function">gmp_and()</a></span></li>
    <li><span class="function"><a href="function.gmp-or.php" class="function">gmp_or()</a></span></li>
    <li><span class="function"><a href="function.gmp-xor.php" class="function">gmp_xor()</a></span></li>
    <li><span class="function"><a href="function.gmp-testbit.php" class="function">gmp_testbit()</a></span></li>
    <li><span class="function"><a href="function.gmp-clrbit.php" class="function">gmp_clrbit()</a></span></li>
   </ul>
  </p>
 </div>
</div><?php manual_footer($setup); ?>