2015-05-14 15 views
5

Będzie to:Bitshifting na little-endian i big-endian

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

zawsze TRUE w obu little-endian i big-endian maszyn?

+2

Jedną z rzeczy, która dezorientuje wielu ludzi, jest to, że endianizm jest związany tylko z * zewnętrznym dyskiem *. Wewnątrz rejestru procesora nie ma "endian-ności". Numer jest odczytywany z pamięci po konwencjach endianów, ale wewnątrz rejestru jest to ta sama liczba, bez względu na początkową endian-ność. Tak więc przy prawidłowym przesuwaniu bitów po prostu pozbywamy się najmniej znaczących bitów i nie ma dwuznaczności. – vsoftco

Odpowiedz

8

Tak. Endianness wpływa tylko na sposób przechowywania bajtów w pamięci. Wartość 0x10203040 jest zawsze 270544960, niezależnie od tego, czy jest to pierwszy czy ostatni bajt w pamięci, czyli 0x10.

Aby nieodpłatnie wypożyczyć obrazów z artykułu z Wikipedii na Endianness, niezależnie od tego, który z tych układów nasz system wykorzystuje:

enter image description hereenter image description here

wartość 0x0A0B0C0D jest wciąż ten sam.

2

będzie to:

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

być zawsze TRUE w obu little-endian i big-endian maszyn?

Tak, zapewni to taki sam wynik na obu architekturach. Jest to właściwie operacja matematyczna, a zamówienia MSB LSB będą obsługiwane pod maską mikrokodu tego konkretnego procesora.

+0

Operacje bitowe to operacje matematyczne? Nie sądzę ... – 0x10203040

+2

@ 0x10203040 Dlaczego uważasz, że algebra boolowska i operacje takie jak bitshift (które równoważne mnożenie/dzielenie przez 2) nie są matematyczne? –

+0

Masz rację. Przepraszam. – 0x10203040