首页 > 解决方案 > 我不懂简单的二进制解码器代码。这段代码如何运作良好?

问题描述

首先,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()

标签: pythonwhile-loopbinarydecoder

解决方案


它不会低于零(即负数),但会下降 0. 即,//=截断任何小数部分,意思是1 // 2计算为0v什么时候1减半它产生0并且循环结束。


推荐阅读