for循环中的按位AND和模数会产生意外结果

时间:2017-12-07 04:25:44

标签: python

for i in range(10):
    if i&3 == 0 or i%5 == 0:
        print(i)

猜猜输出是什么?

0 4 五 8

4和8不应该是输出。为什么会这样?

1 个答案:

答案 0 :(得分:2)

In [1]: bin(3)
Out[1]: '0b11'

In [2]: bin(5)
Out[2]: '0b101'

In [3]: for i in range(10):
...:     print i, bin(i), i&3, bin(i&3), i&5, bin(i&5)
...:   
0 0b0 0 0b0 0 0b0
1 0b1 1 0b1 1 0b1
2 0b10 2 0b10 0 0b0
3 0b11 3 0b11 1 0b1
4 0b100 0 0b0 4 0b100
5 0b101 1 0b1 5 0b101
6 0b110 2 0b10 4 0b100
7 0b111 3 0b11 5 0b101
8 0b1000 0 0b0 0 0b0
9 0b1001 1 0b1 1 0b1

这些数字出现的原因是因为最后两位是关闭的' 00' (i& 3),或者最后三位是' 000'或者' 010'

相关问题