This answer说Python中整数的字节序取决于处理器架构。 这是否意味着像这样的按位运算
msg = 0
msg |= 1 << n
根据处理器的不同,在不同的计算机上会产生不同的结果?
一位同事推荐我使用x*2**n
而不是x << n
因为前者应该是独立于平台的。但我真的不喜欢这样,因为它会混淆我在通过 CAN 总线发送的消息中设置特定位的意图,并且可能需要更多的处理能力(我不知道 python 解释器能够进行多少优化) )。
这会产生不同的结果吗(假设 x
和 n
都是正整数)?
最佳答案
像这样的按位运算不依赖于任何语言的硬件字节顺序,甚至 C 也不依赖。这些类型的操作发生在数字加载到 CPU 寄存器之后,此时内存中的布局并不重要。您可以将它们本质上视为算术运算,例如 + 或 -。
所以,你的同事错了,x << n
在所有平台上都意味着相同的事情。事实上,基本上所有“基本”Python 语言在所有平台上的工作方式都是相同的。标准库中只有特定于平台的函数有所不同。
关于移位操作的另一件事:Python 特别有点特殊,因为它具有无限长度的整数,但是 <<
正如您所期望的那样工作。 1 << 1000
与 2**1000
相同一般来说x << n == x * (2**n)
如果 x 和 n 是整数。
关于python - python 中整数的按位运算是否依赖于处理器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56703764/