我知道程序将Decimal转换为Binary,实际上我只是编程的初学者而python是我的首发语言。
回答这些问题对我有很大帮助。
def bin(i):
s = "" # what do we mean by s="" ? does it mean s=0?
while i: # where is the condition ?
if i & 1: # what is the equivalent for '&'? when I put 'and' instead of '&' I get differnt results?why?
s = "1" + s # ?
else:
s = "0" + s
i = i//2 # why?
return s
问题是我想要解决输入和输出之间发生的事情? 还有一件事我们可以将这段代码扩展到浮动数字吗?
答案 0 :(得分:3)
让我试着一次一个地回答你的问题;那么你应该把它们拼凑起来:
s = "" # what do we mean by s="" ? does it mean s=0?
s
现在是一个空字符串。你可以添加其他字符串,以连接它们。实际上,这是后来在s = "1" + s
行中所做的。看看:
In [21]: "1" + ""
Out[21]: '1'
In [22]: "1" + "2"
Out[22]: '12'
In [23]: s = ""
In [24]: "1" + s
Out[24]: '1'
查看字符串连接的工作原理?
下一步强>:
while i: # where is the condition ?
啊!在条件语句(如0
或{{}中使用时,许多编程语言(包括python)中存在一个值为False
的整数求值为if
的布尔值的细微差别。 1}})。所有非零值都评估为while
。
因此,这个while循环是True
。请注意,由于while i does not take the value of 0
之后的分割,i
永远不会采用负值,因此此循环终止。
下一步强>:
i
if i & 1: # what is the equivalent for '&'? when I put 'and' instead of '&' I get differnt results?why?
是一个按位运算符。假设i&1
的值为i
。然后,5
的二进制表示为i
。 101
的二进制表示只是1
或1
(因为我们将它与001
进行比较)。所以现在,我们执行逐位AND,它基本上比较每对相应的位,如果它们都是101
s,则输出1
(否则为1
)。因此,比较0
和101
的结果是001
,其转换为001
的值。所有这些意味着,当您将1
除以i
时,您将得到余下的2
。由于唯一的可能性是1
(在if语句中评估为1
)或True
(在if语句中评估为0
),有助于以这种二分法的方式使用(将False
或"0"
添加到"1"
)
下一步强>:
s
这是带有整数转换的截断除法。观看:
i = i//2
得到它?