Вы генерируете номера формы 2**(16 + randrange(0,16))
. Я предполагаю, что это не то, что вы хотите. Давайте разбить его:
i = randrange(0, 16)
i
случайное число от 0 до 16. Хорошо до сих пор. Давайте предположим, что i = 3
.
e = bin(2 ** i)[2:]
Так что теперь вы экспоненцируетесь 2
по i
(в нашем примере 2**i = 8
. Затем преобразовать его в двоичное представление и взять задний конец строки, так e = 1000
.
len_e = len(e)
длина e
, что в нашем примере 4
.
e = "0"*(16 - len_e) + e
Это essenti алликаторы e
с нулями, чтобы длина была 16. В нашем примере e = '0000000000001000'
.
return int(e + "0"*(16), 2)
Сначала вы добавляете шестнадцать нулей в конец двоичного представления. Это приводит к тому, что был2**i
и делает это 2**(16 + i)
. Затем вы преобразовываете его в целое число. Вот почему все ваши шестнадцатеричные представления выглядят одинаково.
Если вы хотите, чтобы генерировать случайные 16 битное число, попробуйте следующее:
import random
def rand_16_bit_int():
return random.randrange(2**16)
Наконец, я не уверен, что цель Util
класса и staticmethod
здесь ... Может быть, вы» Re от Java, где вы должны поместить все свои методы в классы. Не так в питоне. Достаточно определить rand_16_bit_int
как бесплатную функцию в вашем модуле.