Ist wahrscheinlich ein ziemlich einfaches Problem, aber ich weiß dafür keine Lösung. Mein Problem: Ich habe eine 8-Bit Binärzahl. Die kann mit 0 oder 1 beginnen. Wie kann ich da jetzt die 1. Stelle wo eine 1 steht von der Zahl abziehen. Das Problem dabei ist, ich kann nicht genau sagen wo die 1 das erste mal auftaucht. Der Grund dafür ist, dass das kleinste Bit eine andere Verwendung hat und nur im Byte mitübertragen wird. Bsp: 00110101 -> ändern auf: 00011010 und die 1 extra 10011000 -> ändern auf: 01001100 und die 0 extra (oder einfach weg) Sonst stimmt mir der berechnete Wert immer um die Zahl der 1. Stelle nicht.
Stichwort Bits verschieben, geht sehr einfach mit Dividieren. siehe z.B. hier Beitrag "Bit verschieben in C"
> 00110101 -> ändern auf: 00011010 und die 1 extra > 10011000 -> ändern auf: 01001100 und die 0 extra (oder einfach weg) Das ist eine Shift-Operation nach rechts bzw. eine Division durch zwei. Vorher musst Du noch den Wert von Bit 0 bestimmen. In C:
1 | uint8_t Wert; // Ausgangswert |
2 | |
3 | uint8_t NeuWert; // Ergebnis |
4 | uint8_t Wert0; // Wert von Bit 0 |
5 | |
6 | |
7 | Wert0 = Wert & 0x01; |
8 | |
9 | NeuWert = Wert >> 1; |
Ach so einfach geht das? Hätte ich mir nicht gedacht :-D Thx ihr beide!
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.