联系我们联系我们
电子邮箱电子邮箱

实现2进制数与10进制数的转换

[复制链接]
  • TA的每日心情
    无聊
    2019-9-27 09:24
  • 签到天数: 2 天

    [LV.1]初来乍到

    jia91921314 发表于 2020-10-28 17:09:36
    65 0
    1.脚本设计:本次编写的是一个实现2进制数与10进制数互相转换的脚本程序,程序将会分为三大部分。

    2.第一部分:执行程序时接受一个参数,判断此参数是否符合定义,如果不符合则返回显示“wrong argument”,并退出程序,代码如下。

    if [ "$1" = 2 -o "$1" = 10 ] && [[ "$2" =~ ^[0-9] $ ]];then        
            :                        
    //判断$1变量是否为2或者10,并且判断$2变量是否为数字,如果两者成立将直接结束当前if语句,执行下一条语句。(冒号为结束语句)
            else
                    echo wrong argument
                    exit 1
    fi

    //如果上述条件不成立,则执行else,返回显示“wrong argument”并且直接结束程序。

    3.第二部分:10进制数转换为2进制,根据如上判断之后,将会通过$1变量中的数执行如下语句,如$1变量中的数为2将执行2进制数换位10进制数,如为10将执行10进制数转换为2进制数。当下编写10进制数转换2进制数的脚本代码,代码如下。

    if [ "$1" = 10 ]; then
    ##检查$2变量的数字是否过大

            bite=$(echo "$2"|grep -o '[0-9]'|wc -l)        

    //计算$2变量中数字的位数,并赋值与bite。(grep –o ‘[]0-9’此命令是将$2变量中的数字拆分为个位数,并且每一位数占一行,然后使用命令wc –l统计所以行数,从而计算出$2变量中数字的位数。)

            if [ "$bite" -gt 19 ];then
                    echo too big number "$2"
                    exit 2
            fi

    //判断$2变量中的数是否大于19,若果大于将返回显示“too big number “$2””,并且结束程序。

    ##Computing unit code
            declare -i x="$2"                //声明数值型变量x并赋值为$2
            declare y                                //声明变量y
            while [ "$x" -gt 1 ];do        
                    gem=$[$x%2]
                    x=$[x/2]
                    y=$gem$y
            done

    //使用while循环语句将给予的10进制数转换为2进制数。

            y=$x$y
            echo $y

    //显示输出转换好的2进制数。

    fi
    ##ending 1

    4.第三部分:2进制数转换为10进制数,如上所述,$1变量给予参数为2则执行此语句,将2进制数转换为10进制数,代码如下。

    if [ "$1" = 2 ];then

    ##检查$2变量的数字是否过大

            bite=$(echo "$2"|grep -o '[0-9]'|wc -l)
            if [ "$bite" -gt 63 ];then
                    echo too big number "$2"
                    exit 2
            fi

    //同上使用grep –o ‘[0-9]’将一串2进制数字划分为单个的数字,然后使用wc –l计算2进制数的位数并赋值与bite。接着通过if语句判断是否大于63位,如果大于则输出“echo too big number "$2"”之后结束程序,如果不满足则执行下面的语句。

    ##Computing unit code
    ##include judge the  $2 is or not a Binary number
            y=0
            let x=$bite-1
            b=$x
            for i in $(seq "$b") ;do

    ##判断数字是否为二进制

                    j=$(echo "$2"|cut -c $i)
                    if [ $j -gt 1 ];then
                            echo "$2" is not a Binary number.
                            exit 3
                    else
                            y=$[j*2**x y]
                            let x--
                    fi
            done

    //使用命令cut –c $i获取2进制数的对应位置的数字赋值给变量j,然后使用if语句判断变量j中的数是否大于1,如果大于则返回“"$2" is not a Binary number.”并结束程序,否则执行else中的语句,将二进制数转换为十进制数。

            ##判断最后一位数是否大于1,如果大于则不为二进制,输出显示‘"$2"  is not a Binary number.’并结束程序。
    last=$(echo "$2"|cut -c "$bite")

            if [ "$last" -gt 1 ];then
                    echo "$2"  is not a Binary number.
                    exit 3


    ##否则加上最后一位数,并输出结果。

            else
                    let y=y last
                    echo $y
            fi
    fi

    ##ending 2


    5.运行程序

    图片1.png

    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    发表新帖

    小黑屋|手机版|Archiver|华盟论坛 ( 京ICP备11013304号-8 )

    Powered by 华盟网 X 8.0  © 2001-2013 Comsenz Inc.  华夏黑客同盟