首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用BitMask计数复位?

用BitMask计数复位?
EN

Stack Overflow用户
提问于 2014-04-10 15:13:15
回答 3查看 99关注 0票数 1

我可以数到100,但使用位掩码将每10次重置为0吗?-还是我错了树?

代码语言:javascript
复制
"""
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)
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2014-04-10 15:15:25

使用mod操作符,%

代码语言:javascript
复制
for x in range(1, 101):
    a = x // 10
    b = x % 10
    print "Value: %s, %s, %s" % (x, a, b)
票数 1
EN

Stack Overflow用户

发布于 2014-04-10 15:58:18

这是不可能的应用位掩码。下面的代码示例可以很容易地理解这一点,该示例输出数字6、16、...,96的最后四位。您可以看到,每个数字的位模式是不同的,但是对于每个数字来说,x % 10 == 6是不同的。

所以不管怎么说,你都要评估整个数字。

代码语言:javascript
复制
for x in range(0,100):
    if x % 10 == 6:
        print (bin(x & 0xf))

结果:

代码语言:javascript
复制
0b110
0b0
0b1010
0b100
0b1110
0b1000
0b10
0b1100
0b110
0b0
票数 1
EN

Stack Overflow用户

发布于 2014-04-10 16:15:27

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

这是我的实验。

代码语言:javascript
复制
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...

测试:

代码语言:javascript
复制
>>> %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
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22992065

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档