我编写了一个方法(在Python中)get_16bit_error
,用于生成16位的随机整数。我试图理解为什么这段代码总是输出“相似”的数字。例如,当我运行此代码两次时,得到0x10000、0x100000或0x800000、0x8000000
class Util(object):
@staticmethod
def get_16bit_error():
i = randrange(0, 16)
e = bin(2 ** i)[2:]
len_e = len(e)
e = "0"*(16 - len_e) + e
return int(e + "0"*(16), 2)
for i in range(2):
print hex(Util.get_16bit_error())
您正在生成
2**(16 + randrange(0,16))
形式的数字。我猜那不是你想要的。我们来分解一下:i
是一个介于0和16之间的随机数。到目前为止还不错。让我们继续假设i = 3
现在你已经将
2
乘以i
(在我们的例子中,2**i = 8
)。然后将其转换为二进制表示,并获取字符串的后端,因此e = 1000
e
的长度,在我们的示例中是4
这实际上是用零填充
e
,这样它的长度就为16首先在二进制表示的末尾加十六个零。这有一个效果,就是服用原来的
2**i
并使之成为2**(16 + i)
。然后将其转换为整数。这就是为什么你所有的十六进制表示看起来都一样如果要生成随机16位数字,请尝试以下操作:
最后,我不确定
Util
类和staticmethod
的目的是什么。。。也许您来自Java,您必须将所有方法都放在类中。在python中并非如此。在模块中将rand_16_bit_int
定义为自由函数就足够了位是一个二进制数字,所以16位是16个二进制数字
相关问题 更多 >
编程相关推荐