<?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 => 'it',
  ),
  'this' => 
  array (
    0 => 'language.operators.bitwise.php',
    1 => 'Operatori sui bit',
    2 => 'Operatori sui bit',
  ),
  'up' => 
  array (
    0 => 'language.operators.php',
    1 => 'Operatori',
  ),
  'prev' => 
  array (
    0 => 'language.operators.assignment.php',
    1 => 'Operatori di assegnazione',
  ),
  'next' => 
  array (
    0 => 'language.operators.comparison.php',
    1 => 'Operatori di confronto',
  ),
  'alternatives' => 
  array (
  ),
  'source' => 
  array (
    'lang' => 'it',
    '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">Operatori sui bit</h2>
 <p class="simpara">
  Gli operatori sui bit permettono la valutazione e manipolazione di specifici
  bit in un valore intero.
 </p>
 <table class="doctable table">
  <caption><strong>Operatori sui bit</strong></caption>
  
   <thead>
    <tr>
     <th>Esempio</th>
     <th>Nome</th>
     <th>Risultato</th>
    </tr>

   </thead>

   <tbody class="tbody">
    <tr>
     <td><strong class="userinput"><code>$a &amp; $b</code></strong></td>
     <td>And</td>
     <td>Vengono accesi i bit che sono accesi sia in <var class="varname">$a</var> che in <var class="varname">$b</var>.</td>
    </tr>

    <tr>
     <td><strong class="userinput"><code>$a | $b</code></strong></td>
     <td>Or (inclusive or)</td>
     <td>Vengono accesi i bit che sono accesi o in <var class="varname">$a</var> oppure in <var class="varname">$b</var>.</td>
    </tr>

    <tr>
     <td><strong class="userinput"><code>$a ^ $b</code></strong></td>
     <td>Xor (exclusive or)</td>
     <td>
 Vengono accesi i bit che sono accesi in <var class="varname">$a</var> o in <var class="varname">$b</var>, ma non quelli accesi in entrambe le variabili.
     </td>
    </tr>

    <tr>
     <td><strong class="userinput"><code>~ $a</code></strong></td>
     <td>Not</td>
     <td>
 Vengono accesi i bit che sono spenti in <var class="varname">$a</var>, e viceversa
     </td>
    </tr>

    <tr>
     <td><strong class="userinput"><code>$a &lt;&lt; $b</code></strong></td>
     <td>Shift left</td>
     <td>
 Sposta verso sinistra i bit di <var class="varname">$a</var> per <var class="varname">$b</var> volte (ogni passo significa
 &quot;moltiplica per due&quot;)
     </td>
    </tr>

    <tr>
     <td><strong class="userinput"><code>$a &gt;&gt; $b</code></strong></td>
     <td>Shift right</td>
     <td>
 Sposta verso destra i bit di <var class="varname">$a</var> per <var class="varname">$b</var> volte (ogni passo significa
 &quot;dividi per due&quot;)
     </td>
    </tr>

   </tbody>
  
 </table>

 <p class="para">
  Lo spostamento di bit in PHP è aritmetico.
  I bit spostati al di fuori delle estremità sono scartati.
  Gli spostamenti a sinistra inseriscono zeri a destra mentre il bit
  di segno è scartato sulla sinistra, quindi il segno di un operando
  non è conservato.
  Gli spostamenti a destra copiano il bit di segno sulla sinistra,
  quindi il segno di un operando è conservato.
 </p>
 <p class="para">
  Utilizzare le parentesi per assicurare la
  <a href="language.operators.precedence.php" class="link">precedenza</a> desiderata.
  Per esempio, <code class="literal">$a &amp; $b == true</code> valuta
  l&#039;equivalenza e poi l&#039;operatore and; mentre
  <code class="literal">($a &amp; $b) == true</code> valuta l&#039;operatore and e
  poi l&#039;equivalenza.
 </p>
 <p class="para">
  Se entrambi gli operandi per il operatori <code class="literal">&amp;</code>, <code class="literal">|</code>
  e <code class="literal">^</code> sono stringhe, allora l&#039;operazione verrà
  eseguita sui valori ASCII dei caratteri che compongono le stringhe e
  il risultato sarà una stringa. In tutti gli altri casi, entrambi gli operandi saranno
  <a href="language.types.integer.php#language.types.integer.casting" class="link">convertiti in interi</a>
  e il risultato sarà un intero.
 </p>
 <p class="para">
  Se l&#039;operando per l&#039;operatore <code class="literal">~</code> è una stringa,
  l&#039;operazione verrà eseguita sui valori ASCII dei caratteri che compongono
  la stringa e il risultato sarà una stringa, altrimenti l&#039;operando e il
  risultato saranno trattati come interi.
 </p>
 <p class="para">
  Sia gli operandi che il risultato per gli operatori <code class="literal">&lt;&lt;</code>
  e <code class="literal">&gt;&gt;</code> sono sempre trattati come interi.
 </p>
 <p class="para">
  <div class="informalexample">
   <p class="para">
    <pre class="literallayout">
L&#039;opzione ini error_reporting di PHP usa valori imappati sui bit,
fornendo quindi una dimostrazione reale dello spegnimento 
dei bit. Per mostrare tutti gli errori, eccettuati gli avvisi,
le istruzioni del file php.ini dicono di usare:
<strong class="userinput"><code>E_ALL &amp; ~E_NOTICE</code></strong>
    </pre>
   </p>
   <p class="para">
    <pre class="literallayout">
Si prende il valore di E_ALL:
<span class="computeroutput">00000000000000000111011111111111</span>
Quindi quello di E_NOTICE...
<span class="computeroutput">00000000000000000000000000001000</span>
... e lo si inverte con <code class="literal">~</code>:
<span class="computeroutput">11111111111111111111111111110111</span>
infine, si usa AND (&amp;) pre trovare i bit che sono accesi
in entrambi i valori:
<span class="computeroutput">00000000000000000111011111110111</span>
    </pre>
   </p>
   <p class="para">
    <pre class="literallayout">
Un altro metodo per ottenere questo risultato è usare XOR (<code class="literal">^</code>)
per trovare i bit che sono accesi solo in uno dei due operandi:
<strong class="userinput"><code>E_ALL ^ E_NOTICE</code></strong>
    </pre>
   </p>
  </div>
 </p>
 <p class="para">
  <div class="informalexample">
   <p class="para">
    <pre class="literallayout">
error_reporting può essere usata anche per dimostrare come accendere i bit.
Il modo per mostrare solo gli errori e gli errori recuperabili è:
<strong class="userinput"><code>E_ERROR | E_RECOVERABLE_ERROR</code></strong>
    </pre>
   </p>
   <p class="para">
    <pre class="literallayout">
Questo processo combina E_ERROR
<span class="computeroutput">00000000000000000000000000000001</span>
e
<span class="computeroutput">00000000000000000001000000000000</span>
usando l&#039;operatore OR (<code class="literal">|</code>)
per recuperare i bit accesi in entrambi i valori:
<span class="computeroutput">00000000000000000001000000000001</span>
    </pre>
   </p>
  </div>
 </p>
 <p class="para">
  <div class="example" id="example-1">
   <p><strong>Example #1 Operazioni AND, OR e XOR su interi</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 /> * Ignorare la sezione iniziale,<br /> * server solo a formattare per rendere più leggibile il risultato.<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 /> risultato     valore     op test<br /> ---------     ---------  -- ---------<br /></span><span style="color: #007700">EOH;<br /><br /><br /></span><span style="color: #FF8000">/*<br /> * Ecco gli esempi.<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 Bitwise 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 Bitwise Inclusive 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 Bitwise Exclusive 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>Il precedente esempio visualizzerà:</p></div>
   <div class="example-contents screen">
<div class="annotation-interactive cdata"><pre>
 ---------     ---------  -- ---------
 risultato     valore     op test
 ---------     ---------  -- ---------
 Bitwise 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)

 Bitwise Inclusive 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)

 Bitwise Exclusive 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>Example #2 Operazioni XOR su stringhe</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: #FF8000">// Ritorna '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: #FF8000">// Ritorna il carattere Backspace (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: #FF8000">// Ritorna i valori 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: #FF8000">// Ritorna 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: #FF8000">// Ritorna 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>Example #3 Spostamento di bit su interi</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 /> * Ecco gli esempi.<br /> */<br /><br /></span><span style="color: #007700">echo </span><span style="color: #DD0000">"\n--- SPOSTAMENTO A DESTRA SU INTERI POSITIVI ---\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 di segno inserito a sinistra'</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">'i bit escono dal lato destro'</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">'come sopra; non c'</span><span style="color: #0000BB">è spostamento oltre lo 0</span><span style="color: #DD0000">');<br /><br /><br />echo "\n--- SPOSTAMENTO A SINISTRA SU INTERI NEGATIVI ---\n";<br /><br />$val = -4;<br />$places = 1;<br />$res = $val &gt;&gt; $places;<br />p($res, $val, '</span><span style="color: #007700">&gt;&gt;</span><span style="color: #DD0000">', $places, '</span><span style="color: #0000BB">copia del bit di segno inserito a sinistra</span><span style="color: #DD0000">');<br /><br />$val = -4;<br />$places = 2;<br />$res = $val &gt;&gt; $places;<br />p($res, $val, '</span><span style="color: #007700">&gt;&gt;</span><span style="color: #DD0000">', $places, '</span><span style="color: #0000BB">i bit escono dal lato destro</span><span style="color: #DD0000">');<br /><br />$val = -4;<br />$places = 3;<br />$res = $val &gt;&gt; $places;<br />p($res, $val, '</span><span style="color: #007700">&gt;&gt;</span><span style="color: #DD0000">', $places, '</span><span style="color: #0000BB">come sopra</span><span style="color: #007700">; </span><span style="color: #0000BB">non c</span><span style="color: #DD0000">'è spostamento oltre il -1'</span><span style="color: #007700">);<br /><br /><br />echo </span><span style="color: #DD0000">"\n--- SPOSTAMENTO A SINISTRA SU INTERI POSITIVI ---\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">'zeri inseriti a destra'</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">'i bit di segno sono spostati'</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">'i bit escono dal lato sinistro'</span><span style="color: #007700">);<br /><br /><br />echo </span><span style="color: #DD0000">"\n--- SPOSTAMENTO A SINISTRA SU INTERI NEGATIVI ---\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">'zeri inseriti a destra'</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">'i bit escono dal lato sinistro, incluso il bit di segno'</span><span style="color: #007700">);<br /><br /><br /></span><span style="color: #FF8000">/*<br /> * Ignorare questa sezione finale,<br /> * server solo a formattare per rendere più leggibile il risultato.<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">"Espressione: %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">" Decimale:\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"</span><span style="color: #007700">;<br />}<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
   </div>

   <div class="example-contents"><p>Risultato del precedente esempio su macchine a 32 bit:</p></div>
   <div class="example-contents screen">
<div class="annotation-interactive cdata"><pre>

--- SPOSTAMENTO A DESTRA SU INTERI POSITIVI ---
Espressione: 2 = 4 &gt;&gt; 1
 Decimale:
val=4
res=2
 Binario:
val=00000000000000000000000000000100
res=00000000000000000000000000000010
 NOTA: copia del bit di segno inserito a sinistra

Espressione: 1 = 4 &gt;&gt; 2
 Decimale:
val=4
res=1
 Binario:
val=00000000000000000000000000000100
res=00000000000000000000000000000001

Espressione: 0 = 4 &gt;&gt; 3
 Decimale:
val=4
res=0
 Binario:
val=00000000000000000000000000000100
res=00000000000000000000000000000000
 NOTA: i bit escono dal lato destro

Espressione: 0 = 4 &gt;&gt; 4
 Decimale:
val=4
res=0
 Binario:
val=00000000000000000000000000000100
res=00000000000000000000000000000000
 NOTA: come sopra; non c&#039;è spostamento oltre lo 0


--- SPOSTAMENTO A DESTRA SU INTERI NEGATIVI ---
Espressione: -2 = -4 &gt;&gt; 1
 Decimale:
val=-4
res=-2
 Binario:
val=11111111111111111111111111111100
res=11111111111111111111111111111110
 NOTA: copia del bit di segno inserito a sinistra

Espressione: -1 = -4 &gt;&gt; 2
 Decimale:
val=-4
res=-1
 Binario:
val=11111111111111111111111111111100
res=11111111111111111111111111111111
 NOTA: i bit escono dal lato destro

Espressione: -1 = -4 &gt;&gt; 3
 Decimale:
val=-4
res=-1
 Binario:
val=11111111111111111111111111111100
res=11111111111111111111111111111111
 NOTA: come sopra; non c&#039;è spostamento oltre il -1


--- SPOSTAMENTO A SINISTRA SU INTERI POSITIVI ---
Espressione: 8 = 4 &lt;&lt; 1
 Decimale:
val=4
res=8
 Binario:
val=00000000000000000000000000000100
res=00000000000000000000000000001000
 NOTA: zeri inseriti a destra

Espressione: 1073741824 = 4 &lt;&lt; 28
 Decimale:
val=4
res=1073741824
 Binario:
val=00000000000000000000000000000100
res=01000000000000000000000000000000

Espressione: -2147483648 = 4 &lt;&lt; 29
 Decimale:
val=4
res=-2147483648
 Binario:
val=00000000000000000000000000000100
res=10000000000000000000000000000000
 NOTA:i bit di segno sono spostati

Espressione: 0 = 4 &lt;&lt; 30
 Decimale:
val=4
res=0
 Binario:
val=00000000000000000000000000000100
res=00000000000000000000000000000000
 NOTA: i bit escono dal lato sinistro


--- SPOSTAMENTO A SINISTRA SU INTERI NEGATIVI ---
Espressione: -8 = -4 &lt;&lt; 1
 Decimale:
val=-4
res=-8
 Binario:
val=11111111111111111111111111111100
res=11111111111111111111111111111000
 NOTA: zeri inseriti a destra

Espressione: -2147483648 = -4 &lt;&lt; 29
 Decimale:
val=-4
res=-2147483648
 Binario:
val=11111111111111111111111111111100
res=10000000000000000000000000000000

Espressione: 0 = -4 &lt;&lt; 30
 Decimale:
val=-4
res=0
 Binario:
val=11111111111111111111111111111100
res=00000000000000000000000000000000
 NOTA: i bit escono dal lato sinistro, incluso il bit di segno
</pre></div>
   </div>
   <div class="example-contents"><p>Risultato del precedente esempio su macchine a 64 bit:</p></div>
   <div class="example-contents screen">
<div class="annotation-interactive cdata"><pre>

--- SPOSTAMENTO A DESTRA SU INTERI POSITIVI ---
Espressione: 2 = 4 &gt;&gt; 1
 Decimale:
val=4
res=2
 Binario:
val=0000000000000000000000000000000000000000000000000000000000000100
res=0000000000000000000000000000000000000000000000000000000000000010
 NOTA: copia del bit di segno inserito a sinistra

Espressione: 1 = 4 &gt;&gt; 2
 Decimale:
val=4
res=1
 Binario:
val=0000000000000000000000000000000000000000000000000000000000000100
res=0000000000000000000000000000000000000000000000000000000000000001

Espressione: 0 = 4 &gt;&gt; 3
 Decimale:
val=4
res=0
 Binario:
val=0000000000000000000000000000000000000000000000000000000000000100
res=0000000000000000000000000000000000000000000000000000000000000000
 NOTA: i bit escono dal lato destro

Espressione: 0 = 4 &gt;&gt; 4
 Decimale:
val=4
res=0
 Binario:
val=0000000000000000000000000000000000000000000000000000000000000100
res=0000000000000000000000000000000000000000000000000000000000000000
 NOTA: come sopra; non c&#039;è spostamento oltre lo 0


--- SPOSTAMENTO A DESTRA SU INTERI NEGATIVI ---
Espressione: -2 = -4 &gt;&gt; 1
 Decimale:
val=-4
res=-2
 Binario:
val=1111111111111111111111111111111111111111111111111111111111111100
res=1111111111111111111111111111111111111111111111111111111111111110
 NOTA: copia del bit di segno inserito a sinistra

Espressione: -1 = -4 &gt;&gt; 2
 Decimale:
val=-4
res=-1
 Binario:
val=1111111111111111111111111111111111111111111111111111111111111100
res=1111111111111111111111111111111111111111111111111111111111111111
 NOTA: i bit escono dal lato destro

Espressione: -1 = -4 &gt;&gt; 3
 Decimale:
val=-4
res=-1
 Binario:
val=1111111111111111111111111111111111111111111111111111111111111100
res=1111111111111111111111111111111111111111111111111111111111111111
 NOTA: come sopra; non c&#039;è spostamento oltre il -1


--- SPOSTAMENTO A SINISTRA SU INTERI POSITIVI ---
Espressione: 8 = 4 &lt;&lt; 1
 Decimale:
val=4
res=8
 Binario:
val=0000000000000000000000000000000000000000000000000000000000000100
res=0000000000000000000000000000000000000000000000000000000000001000
 NOTA: zeri inseriti a destra

Espressione: 4611686018427387904 = 4 &lt;&lt; 60
 Decimale:
val=4
res=4611686018427387904
 Binario:
val=0000000000000000000000000000000000000000000000000000000000000100
res=0100000000000000000000000000000000000000000000000000000000000000

Espressione: -9223372036854775808 = 4 &lt;&lt; 61
 Decimale:
val=4
res=-9223372036854775808
 Binario:
val=0000000000000000000000000000000000000000000000000000000000000100
res=1000000000000000000000000000000000000000000000000000000000000000
 NOTA: i bit di segno sono spostati

Espressione: 0 = 4 &lt;&lt; 62
 Decimale:
val=4
res=0
 Binario:
val=0000000000000000000000000000000000000000000000000000000000000100
res=0000000000000000000000000000000000000000000000000000000000000000
 NOTA: i bit escono dal lato sinistro


--- SPOSTAMENTO A SINISTRA SU INTERI NEGATIVI ---
Espressione: -8 = -4 &lt;&lt; 1
 Decimale:
val=-4
res=-8
 Binario:
val=1111111111111111111111111111111111111111111111111111111111111100
res=1111111111111111111111111111111111111111111111111111111111111000
 NOTA: zeri inseriti a destra

Espressione: -9223372036854775808 = -4 &lt;&lt; 61
 Decimale:
val=-4
res=-9223372036854775808
 Binario:
val=1111111111111111111111111111111111111111111111111111111111111100
res=1000000000000000000000000000000000000000000000000000000000000000

Espressione: 0 = -4 &lt;&lt; 62
 Decimale:
val=-4
res=0
 Binario:
val=1111111111111111111111111111111111111111111111111111111111111100
res=0000000000000000000000000000000000000000000000000000000000000000
 NOTA: i bit escono dal lato sinistro, incluso il bit di segno
</pre></div>
   </div>
  </div>
 </p>
 <div class="warning"><strong class="warning">Avviso</strong>
  <p class="para">
   Utilizzare le funzioni dell&#039;estensione <a href="book.gmp.php" class="link">gmp</a> per
   manipolazioni bit a bit su numeri che vanno oltre il valore di <code class="literal">PHP_INT_MAX</code>.
  </p>
 </div>

 <div class="sect2">
  <h3 class="title">Vedere anche:</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); ?>