<?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 => 'es',
  ),
  'this' => 
  array (
    0 => 'language.operators.bitwise.php',
    1 => 'Bitwise',
    2 => 'Operadores a nivel de bits',
  ),
  'up' => 
  array (
    0 => 'language.operators.php',
    1 => 'Los operadores',
  ),
  'prev' => 
  array (
    0 => 'language.operators.assignment.php',
    1 => 'Asignaci&oacute;n',
  ),
  'next' => 
  array (
    0 => 'language.operators.comparison.php',
    1 => 'Comparaci&oacute;n',
  ),
  'alternatives' => 
  array (
  ),
  'source' => 
  array (
    'lang' => 'es',
    '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">Operadores a nivel de bits</h2>
 
 <p class="simpara">
  Los operadores a nivel de bits permiten manipular los bits en un entero.
 </p>
 <table class="doctable table">
  <caption><strong>Los operadores a nivel de bits</strong></caption>
  
   <thead>
    <tr>
     <th>Ejemplo</th>
     <th>Nombre</th>
     <th>Resultado</th>
    </tr>

   </thead>

   <tbody class="tbody">
    <tr>
     <td><strong class="userinput"><code>$a &amp; $b</code></strong></td>
     <td>And (Y)</td>
     <td>
      Los bits posicionados a 1 en <var class="varname">$a</var> Y en
      <var class="varname">$b</var> son posicionados a 1.
     </td>
    </tr>

    <tr>
     <td><strong class="userinput"><code>$a | $b</code></strong></td>
     <td>Or (O)</td>
     <td>
      Los bits posicionados a 1 en <var class="varname">$a</var> O <var class="varname">$b</var>
      son posicionados a 1.
     </td>
    </tr>

    <tr>
     <td><strong class="userinput"><code>$a ^ $b</code></strong></td>
     <td>Xor (o exclusivo)</td>
     <td>
      Los bits posicionados a 1 en <var class="varname">$a</var> O en
      <var class="varname">$b</var> pero no en los dos son posicionados a 1.
     </td>
    </tr>

    <tr>
     <td><strong class="userinput"><code>~ $a</code></strong></td>
     <td>Not (No)</td>
     <td>
      Los bits que están posicionados a 1 en <var class="varname">$a</var>
      son posicionados a 0, y viceversa.
     </td>
    </tr>

    <tr>
     <td><strong class="userinput"><code>$a &lt;&lt; $b</code></strong></td>
     <td>Desplazamiento a la izquierda</td>
     <td>
      Desplaza los bits de <var class="varname">$a</var>, <var class="varname">$b</var> veces
      a la izquierda (cada desplazamiento equivale a una multiplicación por 2).
     </td>
    </tr>

    <tr>
     <td><strong class="userinput"><code>$a &gt;&gt; $b</code></strong></td>
     <td>Desplazamiento a la derecha</td>
     <td>
      Desplaza los bits de <var class="varname">$a</var>, <var class="varname">$b</var> veces
      a la derecha (cada desplazamiento equivale a una división por 2).
     </td>
    </tr>

   </tbody>
  
 </table>

 <p class="para">
  El desplazamiento de bits en PHP es aritmético.
  Los bits que son desplazados fuera del entero se pierden.
  Los desplazamientos a la izquierda hacen aparecer ceros a la derecha,
  mientras que el bit de signo es desplazado a la izquierda, lo que significa
  que el signo del entero no es preservado.
  Los desplazamientos a la derecha desplazan también el bit de signo a la
  derecha, lo que significa que el signo es preservado.
 </p>

 <p class="para">
  Utilícense paréntesis para asegurarse de que la
  <a href="language.operators.precedence.php" class="link">precedencia</a>
  deseada sea aplicada correctamente. Por ejemplo,
  <code class="literal">$a &amp; $b == true</code> aplica primero
  la igualdad, y luego el AND lógico, mientras que
  <code class="literal">($a &amp; $b) == true</code> aplica primero el
  AND lógico, y luego la igualdad.
 </p>

 <p class="para">
  Si los dos operandos para los operadores <code class="literal">&amp;</code>,
  <code class="literal">|</code> y <code class="literal">^</code> son strings,
  entonces la operación será realizada sobre los valores ASCII de los caracteres y el
  resultado será un string. En todos los otros casos, los dos operandos serán
  <a href="language.types.integer.php#language.types.integer.casting" class="link">convertidos en entero</a>
  y el resultado será un entero.
 </p>
 <p class="para">
  Si el operando para el operador <code class="literal">~</code> es un string,
  la operación será realizada sobre los caracteres ASCII que componen el string y el
  resultado será un string. De lo contrario, el operando y el resultado serán tratados como enteros.
 </p>
 <p class="para">
  Los operandos y el resultado de los operadores <code class="literal">&lt;&lt;</code> y
  <code class="literal">&gt;&gt;</code> son tratados como enteros.
 </p>
 <p class="para">
  El informe de errores de PHP utiliza campos de bits,
  que son una ilustración de la extinción de bits.
  Para mostrar los errores, excepto las notificaciones, las
  instrucciones del php.ini son :
  <strong class="userinput"><code>E_ALL &amp; ~E_NOTICE</code></strong>
 </p>

 <p class="para">
  <div class="informalexample">
   <p class="para">
    <pre class="literallayout">
     Esto se comprende comparando con E_ALL :
     <span class="computeroutput">00000000000000000111011111111111</span>
     Luego, apagando el valor de E_NOTICE...
     <span class="computeroutput">00000000000000000000000000001000</span>
     ... y invirtiéndolo a través de <code class="literal">~</code>:
     <span class="computeroutput">11111111111111111111111111110111</span>
     Finalmente, se utiliza el AND lógico (&amp;) para leer los bits activados
     en las dos valores :
     <span class="computeroutput">00000000000000000111011111110111</span>
    </pre>
   </p>
  </div>
 </p>
 <p class="para">
  Otro medio de llegar a este resultado es utilizar
  el OU exclusivo (<code class="literal">^</code>), que busca
  los bits que están activados solo en una de las
  dos valores, exclusivamente :
  <strong class="userinput"><code>E_ALL ^ E_NOTICE</code></strong>
 </p>
 <p class="para">
  error_reporting también puede ser utilizado para
  ilustrar la activación de bits. Para mostrar
  únicamente los errores y los errores recuperables,
  se utiliza :
  <strong class="userinput"><code>E_ERROR | E_RECOVERABLE_ERROR</code></strong>
 </p>
 <p class="para">
  <div class="informalexample">
   <p class="para">
    <pre class="literallayout">
     Este enfoque combina E_ERROR
     <span class="computeroutput">00000000000000000000000000000001</span>
     y E_RECOVERABLE_ERROR
     <span class="computeroutput">00000000000000000001000000000000</span>
     Con el operador OR (<code class="literal">|</code>) para asegurarse de
     que los bits están activados en una de las dos valores :
     <span class="computeroutput">00000000000000000001000000000001</span>
    </pre>
   </p>
  </div>
 </p>
 <p class="para">
  <div class="example" id="example-1">
   <p><strong>Ejemplo #1 Operaciones sobre bits y enteros</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 /> * Ignórese esta parte,<br /> * es solo formato para clarificar los resultados<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 /> resultado       valor        prueba<br /> ---------     ---------  -- ---------<br /></span><span style="color: #007700">EOH;<br /><br /><br /></span><span style="color: #FF8000">/*<br /> * Aquí están los ejemplos<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 AND a nivel de bits \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 OR inclusivo a nivel de bits \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 OR exclusivo a nivel de bits (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>El ejemplo anterior mostrará:</p></div>
   <div class="example-contents screen">
<div class="annotation-interactive cdata"><pre>
---------     ---------  -- ---------
 resultado       valor        prueba
 ---------     ---------  -- ---------
 AND a nivel de bits
( 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)

 OR inclusivo a nivel de bits
( 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)

 OR exclusivo a nivel de bits (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>Ejemplo #2 Operación sobre bits y strings</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">// Muestra '5'<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">// Muestra el carácter de borrado (ascii 8)<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">// Muestra los valores ASCII #0 #4 #0 #0 #0<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">// Muestra 1<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">// Muestra 1<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>Ejemplo #3 Desplazamiento de bits sobre enteros</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 /> * Aquí están algunos ejemplos<br /> */<br /><br /></span><span style="color: #007700">echo </span><span style="color: #DD0000">"\n--- Desplazamientos a la derecha sobre enteros positivos ---\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">'copia del bit de signo ahora a la izquierda'</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 salieron por la derecha'</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">'mismo resultado que arriba: no hay desplazamiento más allá de 0'</span><span style="color: #007700">);<br /><br /><br />echo </span><span style="color: #DD0000">"\n--- Desplazamientos a la derecha sobre enteros negativos ---\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">'copia del bit de signo ahora a la izquierda'</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 salieron por la derecha'</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">'mismo resultado que arriba: no hay desplazamiento más allá de -1'</span><span style="color: #007700">);<br /><br /><br />echo </span><span style="color: #DD0000">"\n--- Desplazamientos a la izquierda sobre enteros positivos ---\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">'complemento de ceros a la derecha'</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">'el bit de signo salió'</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 salieron a la izquierda'</span><span style="color: #007700">);<br /><br /><br />echo </span><span style="color: #DD0000">"\n--- Desplazamientos a la izquierda sobre enteros negativos ---\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">'complemento de ceros a la derecha'</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 salieron a la izquierda, incluyendo el bit de signo'</span><span style="color: #007700">);<br /><br /><br /></span><span style="color: #FF8000">/*<br /> * Ignórese esta sección<br /> * Contiene código para el formato de este ejemplo<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">"Expresión : %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">" Decimal :\n"</span><span style="color: #007700">;<br />    </span><span style="color: #0000BB">printf</span><span style="color: #007700">(</span><span style="color: #DD0000">"  val=%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">"  res=%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">" Binario :\n"</span><span style="color: #007700">;<br />    </span><span style="color: #0000BB">printf</span><span style="color: #007700">(</span><span style="color: #DD0000">'  val=' </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">'  res=' </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">" Nota : </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>Resultado del ejemplo anterior en una máquina de 32 bits:</p></div>
   <div class="example-contents screen">
<div class="annotation-interactive cdata"><pre>

--- Desplazamientos a la derecha sobre enteros positivos ---
Expresión : 2 = 4 &gt;&gt; 1
 Decimal :
  val=4
  res=2
 Binario :
  val=00000000000000000000000000000100
  res=00000000000000000000000000000010
 Nota : copia del bit de signo ahora a la izquierda

Expresión : 1 = 4 &gt;&gt; 2
 Decimal :
  val=4
  res=1
 Binario :
  val=00000000000000000000000000000100
  res=00000000000000000000000000000001

Expresión : 0 = 4 &gt;&gt; 3
 Decimal :
  val=4
  res=0
 Binario :
  val=00000000000000000000000000000100
  res=00000000000000000000000000000000
 Nota : bits salieron por la derecha

Expresión : 0 = 4 &gt;&gt; 4
 Decimal :
  val=4
  res=0
 Binario :
  val=00000000000000000000000000000100
  res=00000000000000000000000000000000
 Nota : mismo resultado que arriba: no hay desplazamiento más allá de 0


--- Desplazamientos a la derecha sobre enteros negativos ---
Expresión : -2 = -4 &gt;&gt; 1
 Decimal :
  val=-4
  res=-2
 Binario :
  val=11111111111111111111111111111100
  res=11111111111111111111111111111110
 Nota : copia del bit de signo a la izquierda

Expresión : -1 = -4 &gt;&gt; 2
 Decimal :
  val=-4
  res=-1
 Binario :
  val=11111111111111111111111111111100
  res=11111111111111111111111111111111
 Nota : bits salieron por la derecha

Expresión : -1 = -4 &gt;&gt; 3
 Decimal :
  val=-4
  res=-1
 Binario :
  val=11111111111111111111111111111100
  res=11111111111111111111111111111111
 Nota : mismo resultado que arriba: no hay desplazamiento más allá de -1


--- Desplazamientos a la izquierda sobre enteros positivos ---
Expresión : 8 = 4 &lt;&lt; 1
 Decimal :
  val=4
  res=8
 Binario :
  val=00000000000000000000000000000100
  res=00000000000000000000000000001000
 Nota : complemento de ceros a la derecha

Expresión : 1073741824 = 4 &lt;&lt; 28
 Decimal :
  val=4
  res=1073741824
 Binario :
  val=00000000000000000000000000000100
  res=01000000000000000000000000000000

Expresión : -2147483648 = 4 &lt;&lt; 29
 Decimal :
  val=4
  res=-2147483648
 Binario :
  val=00000000000000000000000000000100
  res=10000000000000000000000000000000
 Nota : el bit de signo salió

Expresión : 0 = 4 &lt;&lt; 30
 Decimal :
  val=4
  res=0
 Binario :
  val=00000000000000000000000000000100
  res=00000000000000000000000000000000
 Nota : bits salieron a la izquierda


--- Desplazamientos a la izquierda sobre enteros negativos ---
Expresión : -8 = -4 &lt;&lt; 1
 Decimal :
  val=-4
  res=-8
 Binario :
  val=11111111111111111111111111111100
  res=11111111111111111111111111111000
 Nota : complemento de ceros a la derecha

Expresión : -2147483648 = -4 &lt;&lt; 29
 Decimal :
  val=-4
  res=-2147483648
 Binario :
  val=11111111111111111111111111111100
  res=10000000000000000000000000000000

Expresión : 0 = -4 &lt;&lt; 30
 Decimal :
  val=-4
  res=0
 Binario :
  val=11111111111111111111111111111100
  res=00000000000000000000000000000000
 Nota : bits salieron a la izquierda, incluyendo el bit de signo
</pre></div>
   </div>
   <div class="example-contents"><p>Resultado del ejemplo anterior en una máquina de 64 bits:</p></div>
   <div class="example-contents screen">
<div class="annotation-interactive cdata"><pre>

--- Desplazamientos a la derecha sobre enteros positivos ---
Expresión : 2 = 4 &gt;&gt; 1
 Decimal :
  val=4
  res=2
 Binario :
  val=0000000000000000000000000000000000000000000000000000000000000100
  res=0000000000000000000000000000000000000000000000000000000000000010
 Nota : copia del bit de signo ahora a la izquierda

Expresión : 1 = 4 &gt;&gt; 2
 Decimal :
  val=4
  res=1
 Binario :
  val=0000000000000000000000000000000000000000000000000000000000000100
  res=0000000000000000000000000000000000000000000000000000000000000001

Expresión : 0 = 4 &gt;&gt; 3
 Decimal :
  val=4
  res=0
 Binario :
  val=0000000000000000000000000000000000000000000000000000000000000100
  res=0000000000000000000000000000000000000000000000000000000000000000
 Nota : bits salieron por la derecha

Expresión : 0 = 4 &gt;&gt; 4
 Decimal :
  val=4
  res=0
 Binario :
  val=0000000000000000000000000000000000000000000000000000000000000100
  res=0000000000000000000000000000000000000000000000000000000000000000
 Nota : mismo resultado que arriba: no hay desplazamiento más allá de 0


--- Desplazamientos a la derecha sobre enteros negativos ---
Expresión : -2 = -4 &gt;&gt; 1
 Decimal :
  val=-4
  res=-2
 Binario :
  val=1111111111111111111111111111111111111111111111111111111111111100
  res=1111111111111111111111111111111111111111111111111111111111111110
 Nota : copia del bit de signo ahora a la izquierda

Expresión : -1 = -4 &gt;&gt; 2
 Decimal :
  val=-4
  res=-1
 Binario :
  val=1111111111111111111111111111111111111111111111111111111111111100
  res=1111111111111111111111111111111111111111111111111111111111111111
 Nota : bits salieron por la derecha

Expresión : -1 = -4 &gt;&gt; 3
 Decimal :
  val=-4
  res=-1
 Binario :
  val=1111111111111111111111111111111111111111111111111111111111111100
  res=1111111111111111111111111111111111111111111111111111111111111111
 Nota : mismo resultado que arriba: no hay desplazamiento más allá de -1


--- Desplazamiento a la izquierda sobre enteros negativos ---
Expresión : 8 = 4 &lt;&lt; 1
 Decimal :
  val=4
  res=8
 Binario :
  val=0000000000000000000000000000000000000000000000000000000000000100
  res=0000000000000000000000000000000000000000000000000000000000001000
 Nota : complemento de ceros a la derecha

Expresión : 4611686018427387904 = 4 &lt;&lt; 60
 Decimal :
  val=4
  res=4611686018427387904
 Binario :
  val=0000000000000000000000000000000000000000000000000000000000000100
  res=0100000000000000000000000000000000000000000000000000000000000000

Expresión : -9223372036854775808 = 4 &lt;&lt; 61
 Decimal :
  val=4
  res=-9223372036854775808
 Binario :
  val=0000000000000000000000000000000000000000000000000000000000000100
  res=1000000000000000000000000000000000000000000000000000000000000000
 Nota : el bit de signo salió

Expresión : 0 = 4 &lt;&lt; 62
 Decimal :
  val=4
  res=0
 Binario :
  val=0000000000000000000000000000000000000000000000000000000000000100
  res=0000000000000000000000000000000000000000000000000000000000000000
 Nota : bits salieron a la izquierda


--- Desplazamiento a la izquierda sobre enteros negativos ---
Expresión : -8 = -4 &lt;&lt; 1
 Decimal :
  val=-4
  res=-8
 Binario :
  val=1111111111111111111111111111111111111111111111111111111111111100
  res=1111111111111111111111111111111111111111111111111111111111111000
 Nota : complemento de ceros a la derecha

Expresión : -9223372036854775808 = -4 &lt;&lt; 61
 Decimal :
  val=-4
  res=-9223372036854775808
 Binario :
  val=1111111111111111111111111111111111111111111111111111111111111100
  res=1000000000000000000000000000000000000000000000000000000000000000

Expresión : 0 = -4 &lt;&lt; 62
 Decimal :
  val=-4
  res=0
 Binario :
  val=1111111111111111111111111111111111111111111111111111111111111100
  res=0000000000000000000000000000000000000000000000000000000000000000
 Nota : bits salieron a la izquierda, incluyendo el bit de signo
</pre></div>
   </div>
  </div>
 </p>
 <div class="warning"><strong class="warning">Advertencia</strong>
  <p class="para">
   Úsense las funciones de la extensión <a href="book.gmp.php" class="link">gmp</a>
   para las manipulaciones sobre bits, cuando los enteros exceden
   <strong><code><a href="reserved.constants.php#constant.php-int-max">PHP_INT_MAX</a></code></strong>.
  </p>
 </div>

 <div class="sect2">
  <h3 class="title">Ver también</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); ?>