Questo sito utilizza cookies, anche di terze parti, per mostrare pubblicità e servizi in linea con il tuo account. Leggi l'informativa sui cookies.
Username: Password: oppure
Guida Pascal - Appendice 2  La notazione binaria e gli operatori di shift

Guida Pascal

Capitolo 21° - Appendice 2 La notazione binaria e gli operatori di shift

<< Precedente Prossimo >>
Il codice binario, o notazione binaria, è usato sempre dal computer, per ogni operazione, soltanto che noi non lo sappiamo perché questo è il modo più semplice per le macchine di scambiare informazioni. Quando si compila un programma, il compilatore trasforma ogni istruzione in una serie di 0 e 1, che lelaboratore poi esegue.
E il più semplice sistema di notazione esistente e ha due cifre, 0 e 1. Essendo binario, ogni cifra viene moltiplicata per 2 elevato alla posizione che occupa nel numero meno 1 (le cifre a destra occupano le prime posizioni). Ma è molto più comprensibile un esempio:

1 = 1*2e(1-1) = 1*20 = 1
101 = 1*2e2 + 0*2e1 + 1*2e0 = 4 + 0 + 1 = 5
110101 = 1*2e5 + 1*2e4 + 0*2e3 + 1*2e2 + 0*2e1 + 1*2e0 = 32+16+0+4+0+1 =53

Se nella notazione decimale (quella che usiamo normalmente) abbiamo le decine, le centinaia e le migliaia, nel sistema binario ci sono le duine, le quartine e le ottine, per metterla su un piano molto banale e semplicistico. Un altro esempio:

95 = 90 + 5 = 9*101 + 5*100 (*Sistema decimale*)
95 = 64 + 16 + 8 + 4 + 2 + 1 = 26 + 24 + 23 + 22 + 21 + 20 =
1*2e6 + 0*2e5 + 1*2e4 + 1*2e3 + 1*2e2 + 1*2e1 + 1*2e0 = 1011111 (*Binario*)

Ogni 1 e 0 è un bit, perciò lo shift a destra shr sposta tutti i bit a destra di x posti, mentre shl fa lo stesso a sinistra. Bisogna, però, considerare il tipo di variabile, perché un byte occupa meno di un integer e quindi avrà mano bit a disposizione, per esempio:

var b:byte; (*range: 0..255*)
(*...*)
b=128
b shl 1 = 1000000 shl 1 = 0000000 = 0

var b:integer; (*range: -32768..32767*)
(*...*)
b=128
b shl 1 = 000000010000000 shl 1 = 000000100000000 = 256
<< Precedente Prossimo >>
A proposito dell'autore

Programmatore e analista .NET 2005/2008/2010 (in particolare C# e VB.NET), anche nell'implementazione Mono per Linux. Conoscenze approfondite di Pascal, PHP, XML, HTML 4.01/5, CSS 2.1/3, Javascript (e jQuery). Conoscenze buone di C, LUA, GML, Ruby, XNA, AJAX e Assembly 68000. Competenze basilari di C++, SQL, Hlsl, Java.