为什么使用%2而不是& 1来确定奇偶校验

时间:2016-08-11 21:09:53

标签: python

我注意到确定数字是否在python中的最常用方法是x%2x&1会不会更快?它有什么缺点?

2 个答案:

答案 0 :(得分:3)

至少在我的机器上,

x&1的速度要快得多,但对大多数程序员来说,它的可读性也不那么快。按位并且倾向于向我建议你正在处理位串,而modulo建议使用数字运算,因此除非你正在编写一个需要尽可能快的库函数,否则我将会这样做。 d倾向于选择x%2表达。

In [1]: import numpy as np

In [2]: l = np.random.randint(0, 100, 100)

In [3]: %timeit [x%2 for x in l]
100000 loops, best of 3: 18.3 µs per loop

In [4]: %timeit [x&1 for x in l]
100000 loops, best of 3: 15.5 µs per loop

In [5]: [x&1 for x in l] == [x%2 for x in l]
Out[5]: True

答案 1 :(得分:0)

%2在除以2时检查数字的模数,换句话说,它检查提醒是1还是0,而&1是按位运算符检查最后一位是否相同。按位运算符 IS 略快,但差别可以忽略不计。

IMO我认为%2被更多使用的原因是因为这对于尚未完全研究位和运算符的普通python程序员更有意义,所以解释%2 vs {{1 } {},&1更加用户友好。