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

时间:2019-11-07 13:49:26

标签: python

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

>>>777 & 23
1
>>>777 | 23
799

我不明白在放置&/ |的原因两个整数之间的运算符可以。 我认为这是按位操作(https://docs.python.org/2/library/stdtypes.html#bitwise-operations-on-integer-types),但我仍然不了解按位操作

1 个答案:

答案 0 :(得分:4)

777首先转换为0000001100001001

>>>'{0:016b}'.format(777)
'0000001100001001'

然后将23转换为位

>>> '{0:016b}'.format(23)
'0000000000010111'

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

0 0 0 0 0 0 1 1 0 0 0 0 1 0 0 1   (777)
& & & & & & & & & & & & & & & &     &
0 0 0 0 0 0 0 0 0 0 0 1 0 1 1 1    (23)
↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1

因此,结果是:

0000000000000001 = 1

与或运算符相同:

0 0 0 0 0 0 1 1 0 0 0 0 1 0 0 1   (777)
| | | | | | | | | | | | | | | |
0 0 0 0 0 0 0 0 0 0 0 1 0 1 1 1    (23)
↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓
0 0 0 0 0 0 1 1 0 0 0 1 1 1 1 1

将其转换为int:

>>> int('0000001100011111',2)
799