Będzie to:Bitshifting na little-endian i big-endian
((0x10203040 >> 24) & 0xFF) == 0x10
zawsze TRUE w obu little-endian i big-endian maszyn?
Będzie to:Bitshifting na little-endian i big-endian
((0x10203040 >> 24) & 0xFF) == 0x10
zawsze TRUE w obu little-endian i big-endian maszyn?
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:
wartość 0x0A0B0C0D
jest wciąż ten sam.
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.
Operacje bitowe to operacje matematyczne? Nie sądzę ... – 0x10203040
@ 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? –
Masz rację. Przepraszam. – 0x10203040
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