1

I use python 2.6.6. I use getrandbits(128) to get 128 bits random numbers.

a = random.getrandbits(128)

However, the number of bits are not always 128. Sometimes less than that. What is the reason for this? Is there any libraries that are more stable?

4

1 回答 1

7

这 128 位中的每一个都可以是 0 或 1;如果最左边的位是 0 你的数字将小于 2 ** 127 但它们仍然被生成。这是预期的并且完全正常的行为。

如果您需要最左边的位为 1,请始终使用randrange()

a = random.randrange(1 << 127, 1 << 128)

这会生成一个保证将第一位设置为 1 的数字。或者,生成一个 127 位的数字并添加1 << 127到它:

a = random.getrandbits(127) + (1 << 127)

getrandbits()使用数字将输出格式化为 0 填充的二进制文件时,您可以看到此行为format()

>>> format(random.getrandbits(8), '08b')
'00011110'
>>> format(random.getrandbits(8), '08b')
'01000010'
>>> format(random.getrandbits(8), '08b')
'00110010'
>>> format(random.getrandbits(8), '08b')
'10101010'
>>> format(random.getrandbits(8), '08b')
'10000110'

这些数字是完全随机的,但有时最左边的位以0. 通过生成少 1 位,并将最左边的位添加为 1,您可以生成的随机值数量减半,但保证您看到“所有”位:

>>> format(random.getrandbits(7) + (1 << 8), '08b')
'100010110'
>>> format(random.getrandbits(7) + (1 << 8), '08b')
'101111101'
>>> format(random.getrandbits(7) + (1 << 8), '08b')
'101000111'
>>> format(random.getrandbits(7) + (1 << 8), '08b')
'101011111'

如果这完全可取,这完全取决于您尝试做什么。

于 2013-06-15T15:36:09.677 回答