我们需要计算位元和介于A和B之间的所有自然数,两者都包括在内。我在一个网站上遇到这个问题,这里是他们使用的方法,但我无法理解这个方法。有人能用一个例子更清楚地解释一下吗?
为了解决这个问题,我们只需要关注每一个2次方的出现,结果是循环的。现在,对于每个2^i(周期的长度是2^i(i+1),有2^i个零,后面跟着相同数量的1),我们只需要计算1是否在给定的间隔内保持不变,这是通过简单的算术来完成的如果是这样,那么答案中就会出现2的幂,否则就不会。
最佳答案
让我们先用3位来计数(无符号)一些数字:
000 = 0
001 = 1
010 = 2
011 = 3
100 = 4
101 = 5
110 = 6
111 = 7
如果你看这些列,你可以看到最低位与1的循环交替,下一位与2的循环交替,然后是4,第n低位与2^(n-1)的循环交替。
一旦有一个位是0,它就永远是0(因为0和其他的都是0)。
如果
n
和1
的n
位是A
和B
的1
位,则也可以说d < 2^(n-1)
位是换言之,如果一个比特在开始和结束时都是1,并且由于它的周期太大而没有时间在这两者之间更改为0,那么它就只能是1。