Gast
#3116177
Hallo zusammen, folgende Frage zu folgendem Code:
1 | |
2 | |
3 | |
4 | |
5 | |
6 | |
7 | |
8 | |
9 | |
10 | |
11 | |
12 | |
Die gewünschte Ausgabe an PORTB ist dabei: 0b10001010 Funktioniert das so ? Vielen Dank für eure Hilfe. Gruß, Olli
|
Anzeige
|
Bitketten zusammenführen
Gast
#3116177
Hallo zusammen, folgende Frage zu folgendem Code:
Die gewünschte Ausgabe an PORTB ist dabei: 0b10001010 Funktioniert das so ? Vielen Dank für eure Hilfe. Gruß, Olli
Gast
#3116211
nein. Du darfst test.ende nicht um 4 shiften.
Gast
#3116216
und vielleicht test.anfang<<4 als uint8_t casten @ entropie (Gast) >Funktioniert das so ? Nö. Siehe Bitmanipulation. Du musst die unteren 4 Bits maskieren, die oberen schieben, die Maskierung ergibt sich hier automatisch. PORTB = (test.ende << 4) | (test.anfang & 0x0F);
Gast
#3116280
icke schrieb: > ein. > Du darfst test.ende nicht um 4 shiften. warum nicht. C legt doch fest das jeden Operation mindestens mit int zu erfolgen hat. Also muss der compiler test.ende auf 16bit anheben. Das sollte eigentlich funktionieren.
Gast
#3116282
Super danke, wieder was gelernt :) Peter II schrieb: > icke schrieb: >> Du darfst test.ende nicht um 4 shiften. > > warum nicht. [...] Dürfen darf man alles. Es ist aber hier nicht sinnvoll, test.ende ebenso zu shiften wie test.anfang. Die Bits von test.ende sollen doch im unteren Nibble verbleiben. Und wenn du in der Struct einfach die Member vertauschen würdest, bräuchtest du überhaupt nichts shiften, weil dann die Bits bereits in der richtigen Reihenfolge im Byte angeordnet sind, so dass man eine derartige Variable einfach auf den Port legt und bereits alles richtig an seinem Platz ist.
Gast
#3116325
ah super vielen dank ! Antwort schreibenBitte melde dich an, um einen Beitrag zu schreiben. |
Anzeige
|