Forum: Compiler & IDEs Binärzahl um größte Stelle kürzen


von Gast (Gast)


Lesenswert?

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.

von Nils (Gast)


Lesenswert?

Stichwort Bits verschieben, geht sehr einfach mit Dividieren.

siehe z.B. hier Beitrag "Bit verschieben in C"

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

> 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;

von Gast (Gast)


Lesenswert?

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
Noch kein Account? Hier anmelden.