2015-05-14 14 views
5

sarà questo:Bitshifting on little-endian e big-endian

((0x10203040 >> 24) & 0xFF) == 0x10 

sempre TRUE su entrambe le macchine little-endian e big-endian?

+2

Una cosa che confonde molte persone è il fatto che l'endianità è solo legata alla * memoria esterna *. All'interno del registro del processore, non esiste "endianità". Il numero viene letto dalla memoria seguendo le convenzioni di endianità, ma all'interno del registro è lo stesso numero, indipendentemente dalla endianità iniziale. Quindi, quando il giusto cambiamento di bit, ti stai semplicemente liberando di parti meno significative e non c'è alcuna ambiguità. – vsoftco

risposta

8

Sì. Endianness influenza solo il modo in cui i byte vengono memorizzati nella memoria. Il valore di 0x10203040 è sempre 270544960 indipendentemente dal fatto che sia il primo o l'ultimo byte in memoria che è lo 0x10.

di prendere in prestito gratuitamente le immagini alle voci di Wikipedia su Endianness, indipendentemente da quale di questi layout nostro sistema utilizza:

enter image description hereenter image description here

il valore della 0x0A0B0C0D è ancora lo stesso.

2

sarà questo:

((0x10203040 >> 24) & 0xFF) == 0x10 

essere sempre vero su entrambe le macchine little-endian e big-endian?

Sì, fornirà lo stesso risultato su entrambe le architetture. In realtà è un'operazione matematica e gli ordini MSB LSB saranno gestiti sotto il cofano del microcodice di quella particolare CPU.

+0

Le operazioni bit a bit sono operazioni matematiche? Io non la penso così ... – 0x10203040

+2

@ 0x10203040 Perché pensi che l'algebra booleana e le operazioni come il bitshifting (che gli equivalenti moltiplicano/dividendo per 2 in realtà) non sono matematiche? –

+0

Hai ragione. Mi dispiace. – 0x10203040