Anzahl der aktiven bits zwischen zwei bits ermitteln
-
Hallo zusammen,
ich brauche ein Lösung für unten beschriebenes Problem, aber irgendwie komme ich selber nicht drauf
Ich hoffe ihr könnt mir helfen!
Ich habe einen 10 bit langen binärwert, der z.B. so aussehen könnte
9 8 7 6 5 4 3 2 1 0 1 0 1 1 0 0 1 0 1 1
Jetzt muss ich z.B. den Abstand von bit 3 bis bit 9 ermitteln. Es sollen aber nur die aktiven bits dazwischen gezählt werden! In diesem Beispiel wären das 3 bits.
9 8 7 6 5 4 3 1 0 1 1 0 0 1 x x x <= 3 aktive bits von bit 3 bis bit 9
Das Startbit muss aber nicht unbedingt aktiv sein. Es muss auch immer von rechts nach links gezählt werden. Also müssen z.B. die aktiven bits von 5 bis 1 gezählt werden.
9 8 7 6 5 4 3 2 1 0 1 0 1 1 0 0 1 0 1 1 x x x x x <======== <== Ergebniss: 5 aktive bits
Ich hoffe ich konnte das einigermaßen verständlich erklären! Wenn nicht dann bitte fragen.
Ich steh momentan voll auf dem schlauch und weiss nicht wie ich das lösen soll. Ich war noch nie besonders gut in der bit rechnerei.Vielen dank schon mal für eure Hilfe.
-
bitmuster bis zum startbit nach rechts shiften (achtung: muss unsigned sein) und dann irgendwas davon anwenden: http://infolab.stanford.edu/~manku/bitcount/bitcount.html
-
in deinen beispielen vergisst du bit 3 mit einzubeziehen.
-
bis 10 zähler schrieb:
in deinen beispielen vergisst du bit 3 mit einzubeziehen.
vielleicht will er das nicht?
-
Hi Bruder !
In was für einem Datentypen sind deine Bits gespeichert ?
-
Danke für die schnellen Antworten
bit 3 soll nicht mit einbezogen werden! In meinem beispiel ist bit 3 das Startbit, und es ist egal ob das Startbit 0 oder 1 ist. Es soll nicht mitgezählt werden.
@bitbanging-freak,
danke für deinen Tipp, aber irgendwie raff ich das nicht so ganz wie ich nach rechts shiften soll.Hier mal noch ein Beispiel:
9 8 7 6 5 4 3 2 1 0 1 0 1 0 0 1 0 1 1 0 x x ^Startbit
Hier sollen die aktiven bits zwischen bit 2 bis bit 7 gezählt werden. Also habe ich hier 2 aktive bits. Wenn ich jetzt das startbit ganz nach rechts shifte:
1010010110>>2
Dann erhalte ich doch folgendes bitmuster:
1110100101
Wenn ich die aktiven bits Zähle erhalte ich 6. Ist aber leider nicht das was ich brauche, oder habe ich dich völlig falsch verstanden?
Sorry wenn ich meine Problemstellung nicht ganz deutlich darstelle, ich hoffe ihr versteht mich dennoch
-
Kannst auch ne 1er Maske (1<<m) in dem gewünschten Bitbereich( a bis b ) über die Zahl (num) drüber wandern lassen:
int bits( unsigned num, int a, int b ) { int m = a, n = 0; while( m <= b ) (1 << m++) & num ? n++:88; return n; }