Binär zu 1 aus 8

Gast #3007593
Lesenswert?

Wie kann ich in C eine Binärzahl (3 bit) in 1 aus 8 umwandeln?
Mit 8 if müsste es funktionieren. Gibt es eine einfachere, mit weniger 
Schreibaufwand verbundene  Lösung?

000 --> 0000 0001
001 --> 0000 0010
010 --> 0000 0100
011 --> 0000 1000
100 --> 0001 0000
101 --> 0010 0000
110 --> 0100 0000
111 --> 1000 0000
#3007603
Lesenswert?

M.R. schrieb:
> Wie kann ich in C eine Binärzahl (3 bit) in 1 aus 8 umwandeln?
> Mit 8 if müsste es funktionieren. Gibt es eine einfachere

einfacher ist relativ

   1 << i

ist für dich einfacher, für den µC aber nicht

utin8_t mask[] = { 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80 };

  byte = mask[i];

ist eine Variante, die sowohl vom Aufwand für dich, als auch für den µC 
ein Mittelweg darstellt.

Oft ist es auch so, dass man durch eine einfache Umformung im Programm 
dem µC das Leben einfacher machen kann. IN welchem Zusammenhang taucht 
denn das Problem auf?
Gast #3007662
Lesenswert?

Kommt auf den Prozessor an.
Einige können nur um eine Stelle Schieben. Dann sind es im Extremfall 8 
Befehle - beispielsweise 8 Takte.
Das Auslesen aus einer Tabelle dauert aber eventuell nur zwei Takte.
Gast #3007795
Lesenswert?

Ich arbeite mit einem PIC18F. Der Grund warum ich diese Umwandlung 
brauche ist einen Punkt mit den Koordinaten x, y auf einem KS0108 LCD 
auszugeben. Die Bits 5:3 von y enthalten die Page 2:0 enthalten die 
Position in der Page
#3007804
Lesenswert?

M.R. schrieb:
> Ich arbeite mit einem PIC18F. Der Grund warum ich diese Umwandlung
> brauche ist einen Punkt mit den Koordinaten x, y auf einem KS0108 LCD
> auszugeben. Die Bits 5:3 von y enthalten die Page 2:0 enthalten die
> Position in der Page

?
In diesem Zusammenhang ist mir allerdings die von dir geforderte 
Funktionalität aus dem Eröffnungsposting noch nie untergekommen.

Ich denke du hast dich hier verrant.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren