如何更改此代码以将整数转换为九位数的二进制字符串?

时间:2018-10-15 19:05:40

标签: python

我找到了这段代码,它可以满足我需要做的部分工作,但是我不知道它是如何工作的。谁能先解释一下它是如何工作的?

然后我需要少于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)

1 个答案:

答案 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变为零,它只会产生另外的零数字)。