@kikakater:
Zitat:
Da nicht rotiert wird - sondern geshiftet - fällt alles von den unteren 8 Bits weg und die oberen 8 Bits werden durch das Verschieben um 8 Stellen nach rechts zu den unteren 8 Bits
|
Das ist nur dann der Fall, wenn die C-Variablen als unsigned int deklariert worden sind! Wenn man nicht explizit unsigned angibt, verwenden die meisten Compiler standardmäßig signed int! In diesem Fall wird jedoch das Vorzeichen beibehalten, was bedeutet: Wenn an Bitposition 15 eine 1 gestanden ist, dann werden 1er beim Shift-Befehl jeweils an Bitposition 15 gesetzt. Dies deshalb, weil eine 1 vorne als negative Zahl interpretiert wird, die beim Shift erhalten bleiben soll.
Um auf Nummer sicher zu gehen und sich nicht um signed/unsigned kümmern zu müssen:
register a = (16bit register >> 8 ) & 0xFF;