我找到了这段代码,它可以满足我需要做的部分工作,但是我不知道它是如何工作的。谁能先解释一下它是如何工作的?
然后我需要少于9位的二进制字符串,以二进制之前的0填充。例如,50的二进制是110010,但我需要将其表示为:000110010。
decimal = eval(input("Enter an integer between 0 and 511: "))
binaryString = ""
value = decimal
while value != 0:
binaryString = str(value % 2) + binaryString
value = value // 2
print(str(decimal) + "'s binary representation is " + binaryString)
答案 0 :(得分:3)
当前方法通过从“自下而上”生成二进制数字来工作。在每次迭代中,新数字都将放在前面的数字之前。
例如,假设要编码的数字为159。
在第一次迭代中,binaryString
被设置为1
(因为str(159 % 2) == '1'
)。然后将159减半。整数除法159 // 2
会被截断为79。
在第二次迭代中,下一位再次是'1'
(因为str(79 % 2) == '1'
)。这是在前面的数字前加上'11'
。该值再次减半,结果是(79 // 2)=> 39
等等。然后:
(39 % 2) == 1 => '111' 39 // 2 => 19
(19 % 2) == 1 => '1111' 19 // 2 => 9
(9 % 2) == 1 => '11111' 9 // 2 => 4
(4 % 2) == 0 => '011111' 4 // 2 => 2
(2 % 2) == 0 => '0011111' 2 // 2 => 1
(1 % 2) == 1 => '10011111' 1 // 0 => 0
STOP
此处算法停止,因为结果变为零。因此,如果使用此方法,则需要在开头添加其他零,直到您有9位数字为止。但是,不是
while value != 0:
您可以将其用作内部内容相同的循环控件:
for bit_no in range(9):
然后循环将只运行9次,恰好产生9个二进制数字(一旦value
变为零,它只会产生另外的零数字)。