Seite 1 von 1

Bitweiser Operatoren

Verfasst: Dienstag 15. April 2014, 09:42
von kl.feigling89
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.

Re: Bitweiser Operatoren

Verfasst: Dienstag 15. April 2014, 09:45
von BlackJack
@kl.feigling89: Du suchst die bitweise-UND-Verknüpfung mit gesetztem zweiten Bit. Da kommt 0 heraus wenn das Bit nicht gesetzt ist.

Re: Bitweiser Operatoren

Verfasst: Dienstag 15. April 2014, 09:49
von kl.feigling89
Stimmt, echt einfach.

Kam aber gerade nicht selber drauf!
Danke

Re: Bitweiser Operatoren

Verfasst: Dienstag 15. April 2014, 10:02
von kl.feigling89
: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. )

Re: Bitweiser Operatoren

Verfasst: Dienstag 15. April 2014, 10:09
von 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])

Re: Bitweiser Operatoren

Verfasst: Dienstag 15. April 2014, 10:10
von /me
In einer list comprehension würde ich für den Wert "[value] if value & 2 else [0]" verwenden.

Re: Bitweiser Operatoren

Verfasst: Dienstag 15. April 2014, 13:10
von kl.feigling89
Danke, habe es verstanden und konnte es erfolgreich umsetzten!
:D