2015-07-01 11 views
10

Per testare la creazione di un'operazione Xor con più elementi di base (utilizzando Nand, Or e And nel mio caso), devo essere in grado di eseguire un'operazione di non funzionamento. Lo strumento integrato not sembra farlo solo con bit singoli. Se faccio:Come si esegue un'operazione Non in bit in Python?

x = 0b1100 
x = not x 

dovrei ottenere 0b0011 ma invece ho solo ottenere 0b0. Che cosa sto facendo di sbagliato? O Python manca solo questa funzionalità di base?

So che Python ha una funzione Xor incorporata, ma ho usato Python per testare le cose per un progetto/corso HDL in cui ho bisogno di costruire un cancello Xor. Volevo provare questo in Python ma non posso senza un equivalente a un cancello di Not.

+0

Hai bisogno di guardare su. non è un operatore bit a bit. Questi sono operatori bit-saggio (in realtà si mappano ai gate): https://wiki.python.org/moin/BitwiseOperators – rady

risposta

13

Il problema con l'utilizzo ~ in Python, è che funziona con interi con segno. Questo è anche l'unico modo che ha davvero senso a meno che non ti limiti ad un numero particolare di bit. Lo sarà funziona bene con la matematica bit a bit, ma può rendere difficile interpretare i risultati intermedi.

Per la logica a 4 bit, si deve solo sottrarre 0b1111

0b1111 - 0b1100 # == 0b0011 

Per logica 8 bit, sottrarre 0b11111111 ecc

La forma generale è

def bit_not(n, numbits=8): 
    return (1 << numbits) - 1 - n 
+0

Grazie! Sarebbe bello se Python consentisse numeri senza segno, ma sarebbe un grosso cambiamento, quindi funziona. :) – Lauren

4

Prova questo, si chiama il complemento bit a bit operator:

~0b1100 
Problemi correlati