You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

实现无依赖十进制转二进制时出现expr除零错误的求助

十进制转二进制脚本除零错误排查与修复

核心问题点

  • 变量名混乱:循环判断用的是seq,但代码里计数的变量是sec——seq未初始化是空值,[[ "" -ne 9 ]]永远为真,导致循环停不下来。div从128一直除以2,最后变成0,执行expr $num / $div就触发除零报错。
  • 变量赋值语法错误:shell里变量赋值不能有空格,比如num = $d这种写法会被当成命令执行,直接导致变量值异常。
  • 计数更新错误:sec=$(sec + 1)是无效写法,shell没法直接这样计算,必须用expr或者$((...))语法。

修复方案

  1. 修正赋值语法:把所有带空格的赋值改成标准格式,比如:
    num=$d
    div=128
    sec=0
    
  2. 修正循环条件:把判断变量改成sec,并且明确循环8次(对应8位二进制):
    while [[ $sec -lt 8 ]]
    
  3. 修正计数更新:把sec=$(sec + 1)改成:
    sec=$(expr $sec + 1)
    # 或者更简洁的shell原生写法:
    sec=$((sec + 1))
    

修复后的完整代码

# 示例:从命令行参数接收十进制数
d=$1
for i in $d
do
    num=$d
    div=128
    sec=0
    while [[ $sec -lt 8 ]]
    do
        bin=`expr $num / $div`
        echo -n "$bin"
        rem=`expr $num % $div`
        div=$(expr $div / 2)
        num=$rem
        sec=$((sec + 1))
    done
    echo  # 输出后换行,避免结果连在一起
done

内容的提问来源于stack exchange,提问作者Phạm Quốc Minh Đăng

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.17 01:41:02