sarà questo:Bitshifting on little-endian e big-endian
((0x10203040 >> 24) & 0xFF) == 0x10
sempre TRUE su entrambe le macchine little-endian e big-endian?
sarà questo:Bitshifting on little-endian e big-endian
((0x10203040 >> 24) & 0xFF) == 0x10
sempre TRUE su entrambe le macchine little-endian e big-endian?
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:
il valore della 0x0A0B0C0D
è ancora lo stesso.
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.
Le operazioni bit a bit sono operazioni matematiche? Io non la penso così ... – 0x10203040
@ 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? –
Hai ragione. Mi dispiace. – 0x10203040
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