微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

我不明白简单的二进制解码器代码这段代码如何运作良好?

如何解决我不明白简单的二进制解码器代码这段代码如何运作良好?

首先,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。当 v1 时,它产生 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 举报,一经查实,本站将立刻删除。