[gelöst]BitShifting unklare Ausgabe Nr.2
-
Hi Leute,
Ich habe folgenden Code gebastelt der den
Index der 1 bestimmen soll...
Also z.B. 0010000 hätte den Index 4,
doch ich bekomme ein völlig unverständliches
Ergebnis...#include <stdio.h> int main () { char x=8; // 1000 (binär) int i; while (x != 1) // 1. Shifting 1000 -> 0100 { // 2. Shifting 0100 -> 0010 x >>= 1; // 3. Shifting 0010 -> 0001 i++; // Index müsste also 3 ergeben... } printf("x hat den Index %i",i); return 0; }
Wo liegt diesmal mein Denkfehler?
MfG Jonas
-
So:
#include <stdio.h> int main () { char x=8; // 1000 (binär) int i = 0; while ( ( x&1 ) != 1) // 1. Shifting 1000 -> 0100 { // 2. Shifting 0100 -> 0010 x >>= 1; // 3. Shifting 0010 -> 0001 i++; // Index müsste also 3 ergeben... } printf("x hat den Index %i",i); }
-
Sorry für den Post
aber ich habe mein Problem schon gefunden
es lag daran, dass ich i nicht mit 0 initialisiert habe.Wird in deiner Version immer überprüft ob
das erste gesetzte Bit ungleich 1 ist, versteh
ich das richtig?
Gut so kann man es auch mache denke ich.MfG Jonas
Und dankeschön!
-
Bei mir wird geprüft ob das LSB gesetzt ist. Wenn du den Index des höchsten gesetzten Bits haben willst, dann Funktioniert dein Code.
Für das Problem kannst du übrigens auch einen Trick verwenden den die IEEE 754 Repräsentation von Flieskommazahlen zulässt (ist aber nicht Portabel):char x=8; // 1000 (binär) float tmp = ( float )( x & -x ); int i = ( *( unsigned int* )&tmp >> 23 ) - 0x7f;