This answer表示python中整数的字节序取决于处理器体系结构。 这是否意味着像这样的按位操作
x*2**n
在不同的计算机上产生不同的结果,具体取决于处理器?
一个同事建议我使用x << n
而不是x
,因为前者应该独立于平台。但我真的不喜欢这样,因为这会混淆我设置要通过can总线发送的消息中的特定位的意图,并且可能需要更多处理能力(我不知道python解释器能够进行多少优化)。
会得出不同的结果(假设n
和{{1}}都是正整数)吗?
答案 0 :(得分:2)
像这样的按位运算不依赖于任何语言的硬件耐用性,甚至不取决于C。此类操作在将数字加载到CPU寄存器之后发生,此时内存的布局无关紧要。您可以将它们本质上视为算术运算,例如+或-。
因此,您的大学风格是错误的,x << n
在所有平台上的含义相同。实际上,基本上所有“基本” Python语言在所有平台上均相同。标准库中仅平台特定的功能有所不同。
关于移位操作的另一件事:特别是Python有点特殊,因为它具有无限长的整数,但是<<
的工作与您期望的一样。 1 << 1000
与2**1000
相同,如果x和n为整数,则通常与x << n == x * (2**n)
相同。