Erklärung eines Bytes

Moderator Persönliche Seite #732499
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.
#732509
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

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