我在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
答案 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