我遇到过这样一个功能:
import math
import random
def low_zeros(value):
for i in xrange(1, 32):
if value >> i << i != value:
break
return i - 1
Run Code Online (Sandbox Code Playgroud)
我用谷歌搜索,但没有找到任何有用的材料 value >> i << i != value:
它正在检查有多少右侧位设置为零.
>>向右移位,然后<<向左移位相同数量的位移.考虑:
0b1000 >> 3 << 3
Run Code Online (Sandbox Code Playgroud)
第一班将会做0b1000 -> 0b0001.第二个会做0b0001 -> 0b1000.这仍然与原版相同,所以我们已经确定了.
现在让我们看看
0b1000 >> 4 << 4
Run Code Online (Sandbox Code Playgroud)
第一个班次将会这样做,0b1000 -> 0b0000因为它将一个班次从数字的右侧移开.第二个班次将尝试向后移动,但没有任何改变(0 << n == 0对于任何自然数n).该函数用于比较0 != 0b1000,当然也会中断for块的执行.
然后函数返回4-1,即3数字右侧有多少个零.
| 归档时间: |
|
| 查看次数: |
49 次 |
| 最近记录: |