Hallo Sebastian!
Das versteh ich nicht.
data<<=1 //schiebt die variable um eins nach links ?!?
Ja, tut es.
Die Werte kommen bitweise an, das höchste Bit zuerst. Und hier werden sie in der Variablen data gesammelt und nach jedem Schritt um eins nach links geschoben. Nach acht[1] Schritten sind sie dann alle an ihrem Platz.
und das mit dem if versteh ich auch nicht.
data ist mit 0 vorbelegt, es brauchen also nur "1" bits gesammelt zu werden. (Das passiert dann mit data|=1 das fügt ein "1" bit an unterster Stelle ein.)
was soll "in&0x80" bedeuten ?!?
Das prüft, ob nur das höchste Bit (dessen Wertigkeit 0x80=128 ist) gesetzt ist, also ob aus dem Wandler grade eine 1 oder eine 0 rauspuzelt. Das ! davor invertiert die Abfrage, da der Eingang (Hardwarebedingt) das auch tut (und sich das somit wieder aufhebt).
Gruss,
Carsten
[1] eigentlich sieben, im ersten Schritt werden nur Nullen verschoben. Das letzte bit landet ja auf der nullten Position und wird gar nicht mehr geschoben.