小端和大端的位移操作

6

这会发生什么:

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

无论是小端还是大端机器,都应该始终为TRUE吗?

4
许多人感到困惑的一件事是字节序只与外部存储有关。在处理器的寄存器中,没有“字节序”。数字从内存中读取时遵循字节序惯例,但在寄存器内部,它是相同的数字,无论最初的字节序如何。因此,进行右移位操作时,只是将最低有效位丢弃,并且没有歧义。 - vsoftco
2个回答

11

是的。字节序只影响字节如何在内存中存储。无论是第一个还是最后一个字节为 0x100x10203040 的值始终是 270544960

借用维基百科字节序文章中的图片,无论我们的系统使用哪种布局:

输入图像描述输入图像描述

0x0A0B0C0D的值仍然是相同的。


2

will this:

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

be always TRUE on both little-endian and big-endian machines?

是的,它将在两种架构上提供相同的结果。实际上,这是一项数学运算,MSB LSB顺序将在特定CPU微代码的控制下处理。


位运算是数学运算吗?我不这么认为... - 0x10203040
2
@0x10203040 你认为为什么布尔代数和位移操作(实际上相当于乘以/除以2)不是数学? - πάντα ῥεῖ
你是对的。我很抱歉。 - 0x10203040

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接