Forum: Compiler & IDEs Erklärung eines Bytes


von Michael (Gast)


Lesenswert?

HALLO,

kann mir bitte jemand erklären wie sich die zu sendenden Bytes 
zusammensetzen?

channel = 4;
mode = 1;
gain = 0;


spisendbyte(0x08|(channel&0x07));

wir hier 0x0c gesendet?

spisendbyte(((mode<<5)&0xe0)|((gain<<2)&0x1c));

und hier ?

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

Michael wrote:

> spisendbyte(0x08|(channel&0x07));
>
> wir hier 0x0c gesendet?

Ja, die Maskierung von channel mit 0x07 hat nur Schutzfunktion,
bei korrekter Benutzung sollte die nicht notwendig sein, es
bleibt also 0x08 | 0x04 übrig.

> spisendbyte(((mode<<5)&0xe0)|((gain<<2)&0x1c));
>
> und hier ?

gain ist 0, trägt also nicht zum Ergebnis bei.  mode ist 1 und
wird um 5 bits verschoben, es wird also 0b00100000 draus oder
0x20.

von Johannes M. (johnny-m)


Lesenswert?

1
channel = 0x04 -> 00000100b
2
channel & 0x07 -> 00000100b
3
                & 00000111b
4
                -----------
5
                  00000100b
6
... | 0x08  ->  | 00001000b
7
                -----------
8
                  00001100b = 0x0C
9
10
mode = 1
11
gain = 0
12
mode << 5  -> 00000001b << 5 = 00100000b
13
... & 0xe0 ->                & 11100000b
14
                             -----------
15
                               00100000b
16
17
gain << 2  -> 00000000b << 2 = 00000000b
18
... & 0x1c ->                & 00011100b
19
                             -----------
20
                               00000000b
21
... | (mode<<5)&0xe0 ->      | 00100000b
22
                             -----------
23
                               00100000b = 0x20

von Michael (Gast)


Lesenswert?

VIELEN DANK
sehr gut erklärt.

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.