&/| 的结果 两个数字之间的运算符

Kay*_*Kay 1 python

我在python中玩耍,发现了以下内容

>>>777 & 23
1
>>>777 | 23
799
Run Code Online (Sandbox Code Playgroud)

我不明白加 &/| 是什么意思 两个整数之间的运算符可以。我认为这是按位运算(https://docs.python.org/2/library/stdtypes.html#bitwise-operations-on-integer-types),但我仍然不明白按位运算

Kay*_*Kay 5

777 首先转换为位 0000001100001001

\n\n
>>>'{0:016b}'.format(777)\n'0000001100001001'\n
Run Code Online (Sandbox Code Playgroud)\n\n

然后23转换成bit

\n\n
>>> '{0:016b}'.format(23)\n'0000000000010111'\n
Run Code Online (Sandbox Code Playgroud)\n\n

然后将这两个位逐位进行比较(使用 & 运算符),从 777 (0) 的最左边位与 23 (0) 的最左边位开始,然后是第二个左边位,依此类推,即

\n\n
0 0 0 0 0 0 1 1 0 0 0 0 1 0 0 1   (777)\n& & & & & & & & & & & & & & & &     &\n0 0 0 0 0 0 0 0 0 0 0 1 0 1 1 1    (23)\n\xe2\x86\x93 \xe2\x86\x93 \xe2\x86\x93 \xe2\x86\x93 \xe2\x86\x93 \xe2\x86\x93 \xe2\x86\x93 \xe2\x86\x93 \xe2\x86\x93 \xe2\x86\x93 \xe2\x86\x93 \xe2\x86\x93 \xe2\x86\x93 \xe2\x86\x93 \xe2\x86\x93 \xe2\x86\x93\n0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1\n
Run Code Online (Sandbox Code Playgroud)\n\n

因此,其结果是:

\n\n
0000000000000001 = 1\n
Run Code Online (Sandbox Code Playgroud)\n\n

相同,使用 or 运算符:

\n\n
0 0 0 0 0 0 1 1 0 0 0 0 1 0 0 1   (777)\n| | | | | | | | | | | | | | | |\n0 0 0 0 0 0 0 0 0 0 0 1 0 1 1 1    (23)\n\xe2\x86\x93 \xe2\x86\x93 \xe2\x86\x93 \xe2\x86\x93 \xe2\x86\x93 \xe2\x86\x93 \xe2\x86\x93 \xe2\x86\x93 \xe2\x86\x93 \xe2\x86\x93 \xe2\x86\x93 \xe2\x86\x93 \xe2\x86\x93 \xe2\x86\x93 \xe2\x86\x93 \xe2\x86\x93\n0 0 0 0 0 0 1 1 0 0 0 1 1 1 1 1\n
Run Code Online (Sandbox Code Playgroud)\n\n

将其转换为 int:

\n\n
>>> int('0000001100011111',2)\n799\n
Run Code Online (Sandbox Code Playgroud)\n