python - 对如何在 python shell 中对 16 位二进制数执行按位运算感到困惑

标签 python shell bit bitwise-operators

我正在学习 python 中的按位运算符,因此我尝试在 shell 中进行一些实验。我尝试用 8 位数字进行位操作,这似乎工作正常,但如果我尝试使用 16 位数字,就会发生这种情况:

>>> b = 0010000000000000
>>> b
549755813888

如果我尝试更大的数字,一开始输出看起来很正常:

a = 1011110110011001
>>> a
1011110110011001

>>> b = 1100001110000101
>>> b
1100001110000101

但是当我应用按位运算符时,例如 OR |,然后我再次得到小数输出。

>>> a | b
1125874135965693

我觉得这很令人困惑。二元运算符的结果不应该是二进制的吗?如果是这样,转换发生在哪里?最后,为什么只有当我尝试使用 16 位二进制文​​件时才会出现这种情况?

编辑:我在尝试 8 位时得到以下信息:

>>> c = 00000001
>>> d = 10000000
>>> c | d
10000001

最佳答案

您还没有告诉 Python 您正在输入二进制数;与 C 一样,Python 会将 0010000000000000 解释为八进制 (8**13),将 1011110110011001 解释为十进制。请改用 0b 前缀和 bin 函数:

>>> a = 0b1011110110011001
>>> b = 0b1100001110000101
>>> bin(a|b)
'0b1111111110011101'

您的 8 位(Python 也不知道,int 通常是 32 位或 64 位,但最近的版本将无缝过渡到可以达到任何宽度的 long)值以完全相同的方式解释。只是无论前面有多少个零,在任何基数中,1都是1,另一个数字是偶数。尝试 100 | 1000(产生 1004)对于失败的低示例(实际值为 0b1111101000 和 0b1100100)。

关于python - 对如何在 python shell 中对 16 位二进制数执行按位运算感到困惑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30029300/

相关文章:

bash - 为什么 Bash 在扩展此处字符串时总是添加换行符?

linux - 用换行符替换空格,特殊字符包裹的空格除外

mysql - 将IP地址(IPv4)itno转换为R中的整数

c++ - 以位计数递增顺序遍历整数的每个位掩码

python - 调试时在 pool.close() 上抛出异常,但在运行时不会抛出异常

python - 将预先存在的 django git 存储库部署到 heroku

python - Django 在给定的 url 上调用了错误的函数

python - 使用 lxml python 的 xml 解析器问题

bash - 如何处理 bash 安装脚本中的相对路径?

c - 计算存储数字 n 所需位数的宏