2015-05-14 40 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