ich bin gerade dabei mich in den Bit-Operatoren einzuarbeiten. Bis jetzt habe ich sie nicht gebraucht jetzt aber ist abzusehen das ich sie brauchen werde.
Auf Stackoverflow.com habe ich folgende zwei Funktionen gefunden um Bits in einem Interger zu löschen und zu setzen. Diese Funktionen funktionieren. Ich nutze diese Funktionen und noch andere Doku um das Prinzip der Bitmanipulation zu verstehen. Anders gesagt ich möchte, das was die Funktionen machen händisch auf Papier nachrechnen können. Hier die beiden Funktionen:
Code: Alles auswählen
def set_bit(value, bit): return value | (1<<bit)
def clear_bit(value, bit): return value & ~(1<<bit)
Code: Alles auswählen
# Lösche im Interger 255 das Bit an Index 3
print("dezimal:", clear_bit_a(255,3), "binär:", bin(clear_bit_a(255,3)))
# Das erfühlt meine Erwartungen
# Setze im Interger 247 das Bit an Index 3
print("dezimal:", set_bit_a(247,3), "binär:", bin(set_bit_a(247,3)))
# Auch das erfühlt meine Erwartungen.
1. Bitmaske erzeugen:
1 << 3 = 8 = bin(8) = 0b1000
2. Die Bitmaske Invertieren
~8 = -9 = -0b1001
3. Die Maske per & mit der 255 verknüpfen. Hier hagt es, den wenn Wikipedia recht hat dann müsste folgende Rechnung richtig sein:
0b1000
& -0b1001
--------------
0B1000
Das ist aber niemals das was ich erwarten würde. Wo liegt hier mein Denkfehler?