什么&#34; while(1&lt; <n)<=“”self.top:"=“”表示?=“”

时间:2016-01-01 21:16:32

标签: python while-loop

=“”

我在volatile.py的Scapy源代码中看到了这句话。 (1 << n)条件中while的含义是什么?

def __init__(self, inf, sup, seed=None, forever=1, renewkeys=0):
    self.forever = forever
    self.renewkeys = renewkeys
    self.inf = inf
    self.rnd = random.Random(seed)
    self.sbox_size = 256

    self.top = sup-inf+1

    n=0
    while (1<<n) < self.top:
        n += 1
    self.n =n

    self.fs = min(3,(n+1)/2)
    self.fsmask = 2**self.fs-1
    self.rounds = max(self.n,3)
    self.turns = 0
    self.i = 0

1 个答案:

答案 0 :(得分:0)

&LT;&LT;是一个按位运算符,如here所述:

  

x&lt;&lt; y返回x,位置向左偏移y位(和   右侧的新位为零。这是一样的   将x乘以2 ** y。

所以在你提供的代码中,while循环直到2个数字的最大幂小于self.top,如果我们假设self.top是100,那么2的最大幂小于100是64,如果它是200,它将一直到128

In [17]: n = 0
In [18]: top = 100
In [19]: while ( 1 << n ) < top:
    ...:     print ( 1<<n)
    ...:     n+=1
    ...:     
1
2
4
8
16
32
64