Binärzahl Bits durchschieben

Gast #3669512
Lesenswert?

Guten Abend,

Habe bisher nur sehr grundlegend mit C gearbeitet, und stoße jetzt auf 
ein Problem:
Ich muss für mein Programm bei eine Binärzahl (in diesem Fall 6-stellig 
und als Char deklariert) die Bits nach links durchschieben.
Das durchschieben soll bei einmaligem Aufrufen um einen Schiebewert 
geschehen.

Beispiel:
Aus 0b100010 Soll werden:

1. 0b000101
2. 0b001010
3. 0b010100

Kann mir jemand sagen, wie man eine solche Funktion implementiert?
Gast #3669521
Lesenswert?

Max H. schrieb im Beitrag #3669516:
> zahl=zahl<<1;

Und das funktioniert auch dann, wenn das Bit an 1. Stelle ist, nicht 
weiter nach links geschoben werden kann und dann an die letzte Stelle 
springt?
#3669527
Lesenswert?

Ich glaube du willst die bits rotieren und nicht schieben, hab das zu 
spät gemerkt und meinen Post deshalb gelöscht. 6 bits nach links 
rotieren könnte so aussehen:
1
zahl=(zahl<<1);
2
if(zahl&0x40)
3
  zahl|=0x01;
Und dann falls nötig noch die zwei höchstwertigen bits auf null setzen:
1
zahl&=0x3F;
Gast #3669547
Lesenswert?

Max H. schrieb:
> Ich glaube du willst die bits rotieren und nicht schieben

Sorry, mein Fehler, ja rotieren war gemeint.
1
zahl=(zahl<<1);
2
if(zahl&61)
3
  zahl|=0b1;
4

5
zahl&=0b111101;

Das wäre doch das gleiche richtig? Oder hats nen tieferen Sinn warum du 
alles im Hexadezimalsystem schreibst?

Danke schonmal
#3669548
Lesenswert?

Daniel G schrieb:
> Max H. schrieb:
>> Ich glaube du willst die bits rotieren und nicht schieben
>
> Sorry, mein Fehler, ja rotieren war gemeint.
>
>
1
> zahl=(zahl<<1);
2
> if(zahl&61)
3
>   zahl|=0b1;
4
> 
5
> zahl&=0b111101;
6
>
>
> Das wäre doch das gleiche richtig? Oder hats nen tieferen Sinn warum du
> alles im Hexadezimalsystem schreibst?

Weniger fehleranfällig, weil man sich bei der Anzahl an Stellen verzählt 
hat.

Besides: die Umwandlungstabelle von Hex-Ziffern auf Binär muss jeder 
µC-Programmierer im Schlaf kennen. Ist nicht wirklich schwer. Die ist so 
was ähnliches wie das kleine Einmal Eins.
1
   Hex     Binär                     Hex  Binär
2

3
    0       0000                      8   1000
4
    1       0001                      9   1001
5
    2       0010                      A   1010
6
    3       0011                      B   1011
7
    4       0100                      C   1100
8
    5       0101                      D   1101
9
    6       0110                      E   1110
10
    7       0111                      F   1111


> if(zahl&61)
Dezimal ist allerdings noch eine Spur dämlicher als Binär.
#3669571
Lesenswert?

Daniel G schrieb:
> Karl Heinz schrieb:
>>> if(zahl&61)
>> Dezimal ist allerdings noch eine Spur dämlicher als Binär.
>
> Versteh ich nicht so ganz, genauso wenig die Fehleranfälligkeit.
>
> Ich dachte mir je weniger man umrechnen muss, desteo fehlerunanfälliger
> ist das Programm? Oder wie meintest du das?

Genau darum gehts.
Du bist beim Umrechnen durchgefallen.

schnelle Frage:
welche BIts sind in dezimal 73 auf 1 und welche sind auf 0?

wenn du das ohne Papier und Bleistift bzw. ohne Taschenrechner nur im 
Kopf in unter 6 Sekunden schaffst, dann zieh ich meinen Hut.

Welche Bits sind in Hex 0x49 auf 1 und welche auf 0?
Nimm die auswenig gelernte Tabelle von oben her und setz zusammen. Das 
Bitnuster für 4 ist 0100 und das Bitmuster für 9 ist 1001. Das Bitmuster 
für 0x49 ist daher 01001001.

PS: DIe Tabelle ist nicht weiter schwer zu merken. Da gibt es ein paar 
Zusammenhänge, die sich leicht einprägen.
Gast #3670592
Lesenswert?

Karl Heinz schrieb:
> Welche Bits sind in Hex 0x49 auf 1 und welche auf 0?
> Nimm die auswenig gelernte Tabelle von oben her und setz zusammen. Das
> Bitnuster für 4 ist 0100 und das Bitmuster für 9 ist 1001. Das Bitmuster
> für 0x49 ist daher 01001001.

Vielen Dank, hat mir in Sachen Logik gut weitergeholfen :)

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