python - python 中整数的按位运算是否依赖于处理器?

标签 python bit-manipulation endianness

This answer说Python中整数的字节序取决于处理器架构。 这是否意味着像这样的按位运算

msg = 0
msg |= 1 << n

根据处理器的不同,在不同的计算机上会产生不同的结果?

一位同事推荐我使用x*2**n而不是x << n因为前者应该是独立于平台的。但我真的不喜欢这样,因为它会混淆我在通过 CAN 总线发送的消息中设置特定位的意图,并且可能需要更多的处理能力(我不知道 python 解释器能够进行多少优化) )。 这会产生不同的结果吗(假设 xn 都是正整数)?

最佳答案

像这样的按位运算不依赖于任何语言的硬件字节顺序,甚至 C 也不依赖。这些类型的操作发生在数字加载到 CPU 寄存器之后,此时内存中的布局并不重要。您可以将它们本质上视为算术运算,例如 + 或 -。

所以,你的同事错了,x << n在所有平台上都意味着相同的事情。事实上,基本上所有“基本”Python 语言在所有平台上的工作方式都是相同的。标准库中只有特定于平台的函数有所不同。

关于移位操作的另一件事:Python 特别有点特殊,因为它具有无限长度的整数,但是 <<正如您所期望的那样工作。 1 << 10002**1000 相同一般来说x << n == x * (2**n)如果 x 和 n 是整数。

关于python - python 中整数的按位运算是否依赖于处理器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56703764/

相关文章:

x86 - 如何从 16 x 8 位 __m128i 值中提取 32 x 4 位整数

c++ - 从 C++ 调用 cURL 命令返回意外错误代码,如 1792 和 6656

static-analysis - 任何有助于检测 CPU 端序问题的静态分析工具?

python - Django 模板中的 `form.as_p` 从哪里来?

python - 在 Python 中从价格中提取货币符号

python - 使用 python 在 12 x 12 矩阵上使用 numpy.linalg.svd

Python 子进程将新行写入标准输入,直到进程结束

php - 对数组进行按位运算的 eval() 的替代方法

c - htons() 在 Big-Endian 系统上做什么?

java - 将 Java 按位运算转换为 Python