Forum: PC Hard- und Software Hex to bit to dezimal


von Heinz (Gast)


Lesenswert?

Hallo folgendes Problem will ich unter C lösen und bekomme es nicht hin.

Eine Variable
1
u8_var = (uint8) 0x80

ist in binärschreibweise 10000000

jetzt würde ich gerne die 0x80 in dezimal 8 umwandeln da hier die achte 
Stelle in binärschreibweise gemeint ist umwandeln.

Wie geht das?

von 1234 (Gast)


Lesenswert?

Was willst du?

von Peter II (Gast)


Lesenswert?

[c]
uint8_t x = 0x80;

uint8_t r = 0;
while( !(x & 1) ) {
   r++;
   x = x >> 1;
}

r sollte jetzt 7 ;

von Heinz (Gast)


Lesenswert?

ich möchte 0x80 nicht einfach in dezimal umwandeln

sondern zunächst in binär und dann schließend anhand der Bitposition 
einen dezimal Wert bekommen
1
0x80
2
10000000
3
8
4
5
0x08
6
1000
7
4

usw

von Philip Z. (zudy)


Lesenswert?

> jetzt würde ich gerne die 0x80 in dezimal 8 umwandeln da hier die achte
> Stelle in binärschreibweise gemeint ist umwandeln.
>
> Wie geht das?


So wie ich das verstehe willst du den Index jener Ziffer einer binär 
dargestellten Zahl, welche den Wert 1 hat? Ist das richtig?

Auf den ersten Blick macht das der Code von Peter, mit dem feinen 
Unterschied das der Index bei 0 anfängt. Also noch 1 addieren und dann 
hast dus.

von Heinz (Gast)


Lesenswert?

Philip Z. schrieb:
> Auf den ersten Blick macht das der Code von Peter, mit dem feinen
>
> Unterschied das der Index bei 0 anfängt. Also noch 1 addieren und dann
>
> hast dus.

Besten Dank an euch beide. Das habe ich gebraucht.

von Chris L. (kingkernel)


Lesenswert?

du willst wissen, welches bit der variable gesetzt ist, oder?
die jeweilige bitposition entspricht ja 8,4,2,1. das kannst du für beide 
nibble der variable anwenden.
mal als ansatz:
1
for(uint8_t i = 0; i <= 7; i++)
2
{
3
  if(u8_var & (1 << i))
4
    return ++i;
5
}

[edit] zu spät!

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.