Funzioni bitwise con Python
Updated at: 22/07/2014
Essendo Python un linguaggio con aritmetica a virgola mobile non è immediatamente semplice lavorare con variabili a dimensione finita (in bit)
Gli operatori operatori
bitwise implementati di base sono:
- AND binario - simbolo &
- OR binario - simbolo |
- XOR binario - simbolo ^
- Complemento a 1 - simbolo ~
- Shift binario a sinistra - simbolo <<
- Shift binario a destra - simbolo >>
Gli operatori che necessitano di particolare attenzione sono gli ultimi 3. Per visualizzare il numero come sequenza di bit di lunghezza fissata, utilizzare la funzione format()
a=5
print format(a,'04b')
>>0101
Complemento a 1
Questo operatore inverte i valori dei bit del numero. Tuttavia, poichè il numero di cifre degli int è indefinito, la rappresentazione in Python di un intero è la seguente:
a=5
Ipotizzando di voler lavorare con 4 bit, a è pari a 0101. Per Python questo è equivalente a 0...000101 con un numero indefinito di 0
b=~a
b dovrebbe essere pari a 1010 ovvero 10, ma per Python il complemento a 1 è pari a 1...111010, ovvero un numero indefinito. La sua rappresentazione standard sarà quindi -5. Per ottenere esattamente 10 è necessario mettere il risultato in AND con il numero più grande rappresentabile con il numero di bit in uso, nel nostro esempio 15 -> 1111
b=(~a)&15
print format(b,'04b')
>>1010