Bitweiser Operatoren

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
kl.feigling89
User
Beiträge: 42
Registriert: Montag 24. Februar 2014, 14:47

Hab da leider noch eine Frage:

Wie schaffe ich es bei einem Vergleich mit Bitoperationen nur eine stelle zu berücksichtigen?
Damit meine ich, dass ich alle Felder gleich 0 setzten möchte wenn nicht das zweite Bit gesetzt ist:

Kleines Beispiel für die zweite Stelle:
0010

1111
0111
0011
1011

Solche Zahlen in meinem Array möchte ich behalten, aber solche wo die zweite stelle 0 ist möchte ich mit nullen überschreiben.
Mir würde nur eine If-Abfrage der verschiedenen Möglichkeiten einfallen, aller dings sind das bei größeren Binärzahlen viel zu viele.

a = [[1001],[1111],[1011],[0101]]
Nach einer Operation sollte es so aussehen:
a = [[0000],[1111],[1011],[0000]]

Ich würde vermuten man könnte es irgend wie mit Bit-Operationen lösen, aber leider fehlt mir eine Idee wie.
BlackJack

@kl.feigling89: Du suchst die bitweise-UND-Verknüpfung mit gesetztem zweiten Bit. Da kommt 0 heraus wenn das Bit nicht gesetzt ist.
kl.feigling89
User
Beiträge: 42
Registriert: Montag 24. Februar 2014, 14:47

Stimmt, echt einfach.

Kam aber gerade nicht selber drauf!
Danke
kl.feigling89
User
Beiträge: 42
Registriert: Montag 24. Februar 2014, 14:47

:oops: ohh hab es leider doch nicht ganz verstanden.

Also wenn ich das verunde bekomme ich ja sowas:

a = [[0000][0010][0010][0000]]

wie komme ich dann von da aus zu :
a = [[0000],[1111],[1011],[0000]]


( Ausgangs Array a = [[1001],[1111],[1011],[0101]] und zweite Position soll ausschlaggebend sein. )
BlackJack

Code: Alles auswählen

In [61]: a
Out[61]: array([ 9, 15, 11,  5])

In [62]: a & 0b10
Out[62]: array([0, 2, 2, 0])

In [63]: a & 0b10 == 0
Out[63]: array([ True, False, False,  True], dtype=bool)

In [64]: a[a & 0b10 == 0]
Out[64]: array([9, 5])

In [65]: a[a & 0b10 == 0] = 0

In [66]: a
Out[66]: array([ 0, 15, 11,  0])
Benutzeravatar
/me
User
Beiträge: 3555
Registriert: Donnerstag 25. Juni 2009, 14:40
Wohnort: Bonn

In einer list comprehension würde ich für den Wert "[value] if value & 2 else [0]" verwenden.
kl.feigling89
User
Beiträge: 42
Registriert: Montag 24. Februar 2014, 14:47

Danke, habe es verstanden und konnte es erfolgreich umsetzten!
:D
Antworten