2015-05-14 44 views
5

這是否會:Bitshifting在小端和大端

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

始終是TRUE兩個小端和大端機器?

+2

讓很多人感到困惑的一件事是,endian-ness只與* external storage *有關。在處理器的寄存器內部,沒有「字節序」。這個數字是從endian-ness慣例中的內存中讀取的,但是在這個寄存器裏它是相同的數字,不管初始的字節順序如何。所以,當正確的位移時,你只是擺脫了最不重要的位,並且沒有歧義。 – vsoftco

回答

8

是的。字節序隻影響字節在內存中的存儲方式。 0x10203040的值始終爲270544960,不管它是否是內存中的第一個或最後一個字節,即0x10

要在Endianness無償借用維基百科文章的圖像,無論這些佈局的其中我們的系統使用:

enter image description hereenter image description here

0x0A0B0C0D值仍然是相同的。

2

會這樣:

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

總是TRUE兩個小端和大端機器?

是的,它會在兩種體系結構上提供相同的結果。它實際上是一個數學運算,MSB LSB命令將在該特定CPU的微代碼的引擎下處理。

+0

按位運算是數學運算?我不這麼認爲... – 0x10203040

+2

@ 0x10203040你爲什麼認爲布爾代數和像偏移一樣的操作(其實際乘以/除以2)不是數學? –

+0

你說得對。對不起。 – 0x10203040