python - 我不懂简单的二进制解码器代码。这段代码如何运作良好?
问题描述
首先,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
并且循环结束。
推荐阅读
- sql - SQL Developer我如何设置或比较基于月份的日期列
- javascript - 为什么我的 React 状态值没有同步更新?
- nested - 如何访问 graphQL 页面查询中的嵌套值
- embedded - 带有 Mbed-OS 5 的 STM32F4 上出现间歇性但重复的 HAL_RTC_SetDate 错误
- excel - 如何记录单元格位置(非空)并为每个单元格运行宏
- command-line-interface - clickhouse中如何判断当前选中的数据库
- python - 如何分隔数据框中的两行
- javascript - 切换图像源与类不起作用,
- github - 从分叉存储库中发布来自 GitHub 操作的评论的解决方法
- mysql - 从 SQL 数据库触发 API 调用