python 中的整数按位运算是否依赖于处理器?
Are bitwise operations on an integer in python processor dependent?
This answer 表示 python 中整数的字节顺序取决于处理器体系结构。
这是否意味着像
这样的按位运算
msg = 0
msg |= 1 << n
在不同的计算机上产生不同的结果,具体取决于处理器?
一位同事建议我使用 x*2**n
而不是 x << n
,因为前者应该是独立于平台的。但我真的不喜欢那样,因为它会混淆我在通过 can 总线发送的消息中设置特定位的意图,并且可能需要更多的处理能力(我不知道 python 优化了多少口译员有能力)。
这会产生不同的结果吗(假设 x
和 n
都是正整数)?
像这样的按位操作不依赖于任何语言的硬件字节顺序,甚至不依赖于 C。这些类型的操作发生在数字被加载到 CPU 寄存器之后,此时布局在记忆中并不重要。您可以将它们本质上视为算术运算,例如 + 或 -。
所以,你的大学是错误的,x << n
在所有平台上都意味着同样的事情。事实上,基本上所有 "basic" Python 语言在所有平台上的工作方式都是一样的。标准库中只有非常特定于平台的函数有所不同。
关于移位操作的另一件事:特别是 Python 有点特殊,因为它具有无限长度的整数,但 <<
的工作方式与您预期的一样。 1 << 1000
与 2**1000
相同,通常 x << n == x * (2**n)
如果 x 和 n 是整数。
This answer 表示 python 中整数的字节顺序取决于处理器体系结构。 这是否意味着像
这样的按位运算msg = 0
msg |= 1 << n
在不同的计算机上产生不同的结果,具体取决于处理器?
一位同事建议我使用 x*2**n
而不是 x << n
,因为前者应该是独立于平台的。但我真的不喜欢那样,因为它会混淆我在通过 can 总线发送的消息中设置特定位的意图,并且可能需要更多的处理能力(我不知道 python 优化了多少口译员有能力)。
这会产生不同的结果吗(假设 x
和 n
都是正整数)?
像这样的按位操作不依赖于任何语言的硬件字节顺序,甚至不依赖于 C。这些类型的操作发生在数字被加载到 CPU 寄存器之后,此时布局在记忆中并不重要。您可以将它们本质上视为算术运算,例如 + 或 -。
所以,你的大学是错误的,x << n
在所有平台上都意味着同样的事情。事实上,基本上所有 "basic" Python 语言在所有平台上的工作方式都是一样的。标准库中只有非常特定于平台的函数有所不同。
关于移位操作的另一件事:特别是 Python 有点特殊,因为它具有无限长度的整数,但 <<
的工作方式与您预期的一样。 1 << 1000
与 2**1000
相同,通常 x << n == x * (2**n)
如果 x 和 n 是整数。