最近在备考软考的软件设计师考试,在学习过程遇到很多于计算机根底计算相干的知识点,正好最近在学Go语言,所以就把计算的形式用Go语言实现一下。
以后还在学习过程中,如有问题,欢送大佬们斧正

## 二进制转十进制

/*   转换规则:   11001 从开端到结尾,以2为底数,从0开始递增为指数 * 二进制数,而后将这些二进制数相加即可得出10进制数    11001 = 1 * 2^0  + 0 * 2^1  + 0 * 2^2  + 1 * 2^3  + 1 * 2^4   =  1 + 0 + 0 + 8 + 16 = 25    这个规定也实用于其余进制转换为十进制,只须要把底数替换为相应的进制数即可,这种办法叫做  “按权开展法"    留神:    二进制数也有小数点,区别是小数点右边的指数为负数,左边的指数为正数    例如:    11.01 =  1 * 2^-2   + 0 * 2^-1 +  1 * 2^0  + 1 * 2^1  = 0.25 + 0 + 1 + 2 = 3.25*/func binaryToDecimal(val string) string  {    // 获取二进制字符字符串    // 应用前可应用正则校验    [0-1]|[0-1].[0-1]    var text = val    // 指数 v1    var v1 float64 = 0    var  len  =  len(text)    // 查看是否蕴含小数点    contains := strings.Contains(text, ".")    if contains {        index := strings.LastIndex(text, ".")        if index == (len -1) {            text = text[0 : len-1]        } else {            v3  :=len - index            v3--            v1 = float64(0 - v3)        }    }    fmt.Println(v1)    // 后果    var result float64    for i := len -1; i >= 0; i-- {        u := string(text[i])        if u == "." {            continue        }        v2,error := strconv.ParseFloat(u, 64)        if error != nil {            fmt.Println("转换失败",error)        }        // 乘数        pow := math.Pow(2, v1)        // 数值累加        result = result + (v2 * pow)        // 指数递增        v1++    }    // 这里有个BUG,未判断得出的十进制数小数点前面有几位小数    return strconv.FormatInt(int64(result), 10)}

十进制转二进制

/*   十进制转 二进制的办法  十进制数除以2取余数法 */func  decimalToBinary(val string) string  {    number, err := strconv.ParseInt(val, 10, 64)    if err != nil {        fmt.Println("数字转换失败",err)        return ""    }    // 查看数字是否是正数    var bool  = number < 0    if bool {        number = 0 -number    }    var result  = ""    for true {        if number == 1 {            result = fmt.Sprint(result,number)            break        }        //// 除数        var v1 = number / 2        //// 余数        var v2 = number % 2        // 取余数,拼接二进制数        result = fmt.Sprint(result,v2)        number = v1    }        // 反转字符串    var finalResult  = ""    var len = len(result)    for i := len - 1; i >= 0; i-- {        finalResult = fmt.Sprint(finalResult,string(result[i]))    }    // 如果是正数,则减少符号    if bool {        finalResult = fmt.Sprint("-",finalResult)    }    return finalResult}

总结

  • R进制转十进制数的办法叫做按权开展法,这个权指的是指数
  • 指数在小数点左边为正数,右边为负数 例如 二进制数 "1110.01" 的指数顺次为 -2 -1 0 1 2 3
  • 欢送各位大佬斧正