Forum: PC-Programmierung C Frage (Bitoperatoren)


von Jan (Gast)


Lesenswert?

Hallo,

kann mir jemand erklären, was diese Zeile bedeutet?

a = ((buffer[index] << 8) | buffer[index + 1]) + 2;

ich bekomme diese C-Bitrechnerei einfach nicht hin... :((

Danke und Gruß,
Jan

von B. S. (bestucki)


Lesenswert?

Ich nehme an, dass buffer vom Typ uint8_t oder unsigned char ist.


Nehmen wir an, in buffer[index] ist 0x12 und in buffer[index + 1] 0x34 
gespeichert. Dann steht da:
1
a = ((0x12 << 8) | 0x34) + 2;

0x12 wird nun um 8 Stellen nach links geschoben, was einer 
Multiplikation mit 256 entspricht:
1
a = (0x1200 | 0x34) + 2;

Nun wird 0x1200 und 0x34 bitweise oder-verknüpft:
1
a = 0x1234 + 2;

Und schon haben wir das Resultat:
1
a = 0x1236;


Man hätte auch folgendes schreiben können:
1
a = buffer[index] * 256 + buffer[index + 1] + 2;

von Jan (Gast)


Lesenswert?

Alles klar, Danke! :)

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.