如何解决我不明白简单的二进制解码器代码这段代码如何运作良好?
首先,stdio模块只是用来调用stdio.write()函数,与python中的print()函数完全一样。
让我在理解这段代码时头晕目眩的是这部分。 "while v > 0:" 就我的观点而言,v 值永远不会低于零。所以对我来说,它看起来是不停的无限循环。 v 将减半 按顺序。但在我看来,它永远不会低于零。所以,我想如果我给这个程序的输入值 5,那么这个程序会表现得像“1010000000...”这样的结果,但这个程序驱动正确答案“101”,这是十进制数 5 的正确二进制代码. 我错过了什么?
import sys
import stdio
n = int(sys.argv[1])
v = 1
while v <= n // 2:
v *= 2
print(v)
while v > 0:
if n < v:
stdio.write(0)
else:
stdio.write(1)
n -= v
v //= 2
stdio.writeln()
解决方法
它不会低于零(即负数),但它会下降到 0
。即,//=
会截断任何小数部分,这意味着 1 // 2
的计算结果为 0
。当 v
是 1
时,它产生 0
并且循环结束。
这是因为v
不是简单地除以2,而是没有余数,用v //= 2
表示。 //
在 Python 中表示无余数除法,而 /
是正常除法。
例如,如果 v = 2
,则
v //= 2
print(v) # 1
v //= 2
print(v) # 0,end of your while loop
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。