使用BitMask计算重置?

时间:2014-04-10 15:13:16

标签: python bitmask

我可以数到100,但是使用位掩码将每10重置为0吗? - 还是我在错误的树上吠叫?

"""
Required output:
1,2,3,4,5,6,7,8,9,0,1,2,3,4,5...etc repeated 10 times.
"""

reset = 10
for x in range(0, 101):
    a = (x ^ reset)
    b = x & a
    print "Value: %s, %s, %s" % (x, a, b)

3 个答案:

答案 0 :(得分:1)

使用mod运算符%

for x in range(1, 101):
    a = x // 10
    b = x % 10
    print "Value: %s, %s, %s" % (x, a, b)

答案 1 :(得分:1)

通过应用位掩码无法实现。这可以通过下面的代码示例轻松理解,它打印数字6,16,...,96的最后四位。您可以看到每个数字的位模式不同,但每个数字都变为x % 10 == 6

所以,无论如何,你将不得不评估整数。

for x in range(0,100):
    if x % 10 == 6:
        print (bin(x & 0xf))

结果:

0b110
0b0
0b1010
0b100
0b1110
0b1000
0b10
0b1100
0b110
0b0

答案 2 :(得分:0)

如果您想要更快的方式,请考虑使用itertools.cycle

这是我的实验。

from itertools import *
def cycle_iter():
    for i in islice(cycle(xrange(10)), 0, 101):
        yield i

def cycle_mod():
    for x in xrange(0, 101):
        yield x % 10

def cycle_mask():
    for x in xrange(0, 101):
        yield x & 7 & 7#<--It does cycle as 012345670123... And last "& 7" means you need at least one or more operator to generate 01234567890123...

测试:

>>> %timeit x = list(cycle_iter())
100000 loops, best of 3: 9.07 us per loop

>>> %timeit x = list(cycle_mod())
100000 loops, best of 3: 10.2 us per loop

>>> %timeit x = list(cycle_mask())
100000 loops, best of 3: 10.9 us per loop