Hallo zusammen, ich lese ein Decode-Program eines Decoders und verstehe aber folgende Zeile leider nicht, wie eine bitweise-Anweisung ist. (data_temp.data_temp_long)<<=1; Wie ich verstehe, dass data_temp_long um einen Bit auf Links verschoben und der Bit, welcher am 0. Stelle steht, um 1 gesetzt sind. Kann jemand sagen bzw. helfen, ob ich richtig verstanden habe, diese Anweisung auszusagen? Vielen Dank!
M. Ozgan schrieb: > (data_temp.data_temp_long)<<=1; data_temp scheint hier ein struct zu sein. data_temp.data_temp_long bedeutet dann, dass hier auf das Element data_temp_long des structs data_temp zugegriffen wird. Und der operator <<= ist die Kurzschreibweise für einen Bitshift mit anschließender Zuweisung. Wenn man den Operator <<= ausführlich schreibt, dann wird das obige zu
1 | (data_temp.data_temp_long) = (data_temp.data_temp_long) << 1; |
Und das bedeutet, dass der Inhalt des Elements data_temp_long vom struct data_temp um eine Stelle nach links "geshiftet" wird. Nehmen wir an, das data_temp_long ein unsigned char ist und der Inhalt vor der obigen Operation 0x01 (binär: 0b00000001) war, dann steht jetzt ein 0x02 (binär: 0b00000010) in dieser Variablen.
M. Ozgan schrieb: > Wie ich verstehe, dass data_temp_long um einen Bit auf Links verschoben ja > und der Bit, welcher am 0. Stelle steht, um 1 gesetzt sind. nein. Es wird eine 0 nachgeschoben. Die Langform der Anweisung ist:
1 | data_temp.data_temp_long = data_temp.data_temp_long << 1; |
Um ins unterste Bit eine 1 hineinzuschieben, müsste man schreiben:
1 | data_temp.data_temp_long = (data_temp.data_temp_long << 1) | 1; |
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.