您可以在“for 循环”中使用位移操作吗?

Fra*_*ter 3 python

我有以下使用位移位的 C for 循环,我想在 python 中重新实现。

n = 64
for(int stride = n>>1; stride >0; stride >>=1)
   {...
Run Code Online (Sandbox Code Playgroud)

那么哇,这个循环在 python 中看起来会怎么样?

我知道n>>1代表除以 2,但我发现很难用 来建模range()

Rom*_*huk 5

想得更简单:

>>> n = 64
>>> while n:
...     print n
...     n = n >> 1
...
64
32
16
8
4
2
1
Run Code Online (Sandbox Code Playgroud)


Joh*_*web 5

阿马丹的回答很正确。

如果您经常使用此模式,我会将其提取到一个简单的生成器函数中,以便在for循环中重用:

>>> def strider(n):
...     stride = n >> 1
...     while stride > 0:
...         yield stride
...         stride >>= 1
...
>>> for n in strider(64):
...     print n
...
32
16
8
4
2
1
Run Code Online (Sandbox Code Playgroud)