2015-07-01 5 views
10

Um den Aufbau einer Xor-Operation mit grundlegenderen Bausteinen (mit Nand, Oder und And in meinem Fall) zu testen, muss ich eine Not-Operation durchführen können. Das eingebaute not scheint dies nur mit einzelnen Bits zu tun. Wenn ich das tue:Wie mache ich eine bitweise Not-Operation in Python?

x = 0b1100 
x = not x 

sollte ich 0b0011 bekommen, sondern nur, dass ich 0b0 bekommen. Was mache ich falsch? Oder fehlt Python diese grundlegende Funktionalität?

Ich weiß, dass Python eine eingebaute Xor-Funktion hat, aber ich habe Python verwendet, um Dinge für ein HDL-Projekt/Kurs zu testen, wo ich ein Xor-Gatter bauen muss. Ich wollte das in Python testen, aber ich kann nicht ohne ein Äquivalent zu einem Not-Gate.

+0

Sie müssen aufpassen aus. nicht ist kein bitweiser Operator. Dies sind bit weise Operatoren (sie tatsächlich zu Gates zuordnen): https://wiki.python.org/moin/BitwiseOperators – rady

Antwort

13

Das Problem mit ~ in Python verwenden, ist, dass es mit signierten ganzen Zahlen arbeitet. Dies ist auch der einzige Weg, der wirklich sinnvoll ist, wenn man sich nicht auf eine bestimmte Anzahl von Bits beschränkt. Es wird arbeiten ok mit bitweiser Mathematik, aber es kann es schwierig machen, die Zwischenergebnisse zu interpretieren.

Für 4-Bit-Logik, sollten Sie von 0b1111

0b1111 - 0b1100 # == 0b0011 

Für 8-Bit-Logik subtrahieren nur, subtrahieren von 0b11111111 usw.

Die allgemeine Form ist

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

Vielen Dank! Es wäre schön, wenn Python unsignierte Zahlen zulässt, aber das wäre eine große Veränderung, also funktioniert das. :) – Lauren

4

die Sie interessieren, ist es das bitweise Komplement operator genannt:

~0b1100 
Verwandte Themen