【问题标题】:Native Decimal to Binary conversion本机十进制到二进制转换
【发布时间】:2015-03-30 05:05:19
【问题描述】:

有没有一种方法可以直接在 Bash 中计算十进制数的二进制表示,而无需借助 bc 等外部程序?

示例: 假设我在 base 10 中有 5:我想在 base 2 中获得 101

为什么不能使用bc:循环性能。

【问题讨论】:

  • @anubhava 您链接的问题没有指定诞生的约束。您链接的答案仅适用于数字 [0, 255] - 该答案附加的评论解释了如何提高此限制,但是它非常尴尬且效率低下,因此应保留此问题以收集适当的答案。
  • 如果您编辑问题以阐明为什么不能使用bc,那么请确保可以打开此问题。
  • 我编辑了这个问题。然而,关注的不是“为什么”,而是“如何”。
  • 您要转换的输入值范围是多少?您计划多久进行一次转换?您是否需要将二进制转换为十进制?是否使用 awk 或 Perl 或 Python 排除了“循环性能”?您是否测量了性能,还是您猜测这是一个问题?您还打算进行哪些其他计算?但主要是——为什么要重新发明轮子?如果使用bc 太慢,那么可能shell 是错误的语言?

标签: bash binary decimal


【解决方案1】:

使用 bash 的算术运算符而不是查找表。例如

#!/bin/bash

d2b() {
    local bits=
    local num=$1
    while [[ $num != 0 ]]
    do
            if (( $num & 1 ))
            then
                    bits="1$bits"
            else
                    bits="0$bits"
            fi
            let num=$(($num >> 1))
    done
    echo ${bits:=0}
}

for n in $*
do
    d2b $n
done

【讨论】:

    猜你喜欢
    • 2023-04-11
    • 2016-02-09
    • 2016-08-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多