Go语言实现二进制与十进制互转的示例代码

 更新时间:2023年05月04日 15:14:54   作者:往之不谏  
这篇文章主要和大家详细介绍了Go语言中实现二进制与十进制互相转换的示例代码,文中的代码简洁易懂,感兴趣的小伙伴可以跟随小编一起学习一下

最近在备考软考的软件设计师考试,在学习过程遇到很多于计算机基础计算相关的知识点,正好最近在学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

到此这篇关于Go语言实现二进制与十进制互转的示例代码的文章就介绍到这了,更多相关Go语言二进制与十进制互转内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • golang之资源释放/异常错误处理解析

    golang之资源释放/异常错误处理解析

    这篇文章主要为大家介绍了golang之资源释放/异常错误处理解析,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2024-01-01
  • 一篇文章学会GO语言中的变量

    一篇文章学会GO语言中的变量

    Go语言是静态类型语言,因此变量有明确类型的,编译器也会检查变量类型的正确性,下面这篇文章主要给大家介绍了关于GO语言中变量的相关资料,文中通过示例代码介绍的非常详细,需要的朋友可以参考下
    2022-07-07
  • 深入学习Golang的流程控制

    深入学习Golang的流程控制

    Go 语言是一门现代化的编程语言,以其简洁高效、并发安全等特点被越来越多的开发者所使用。本文将深入探讨 Go 语言中的流程控制,包括条件语句、循环语句以及控制语句等方面
    2023-05-05
  • Go打包静态文件的两种方式

    Go打包静态文件的两种方式

    使用 Go 开发应用的时候,有时会遇到需要读取静态资源的情况,如果不打包处理这种静态文件:发布单独挂载这种静态文件相对比较麻烦,就有人会想办法把静态资源文件打包进 Go 的程序文件中,下面介绍两种打包方式:go-bindata、go:embed,需要的朋友可以参考下
    2024-04-04
  • Go语言中init函数和defer延迟调用关键词详解

    Go语言中init函数和defer延迟调用关键词详解

    这篇文章主要介绍了Go语言中init函数和defer延迟调用关键词,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2023-03-03
  • Go 项目目录布局保姆级教程

    Go 项目目录布局保姆级教程

    这篇文章主要为大家介绍了Go 项目目录布局保姆级教程,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-12-12
  • Golang中间件设计示例详解

    Golang中间件设计示例详解

    这篇文章主要介绍了Golang中间件设计示例,中间件是在HTTP请求处理过程中,对请求进行处理的一种模式,中间件可以在请求到达处理器之前或之后对请求进行拦截,修改或者增强,同时可以对响应进行处理,需要的朋友可以参考下
    2023-05-05
  • 详解Go语言中的作用域和变量隐藏

    详解Go语言中的作用域和变量隐藏

    这篇文章主要为大家介绍了Go语言中的作用域和变量隐藏,文中的示例代码讲解详细,对我们学习Go语言有一定的帮助,感兴趣的小伙伴可以了解一下
    2022-04-04
  • 详解Go 依赖管理 go mod tidy

    详解Go 依赖管理 go mod tidy

    这篇文章主要为大家介绍了详解Go 依赖管理 go mod tidy,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-10-10
  • Golang定时任务框架GoCron的源码分析

    Golang定时任务框架GoCron的源码分析

    本文主要介绍了Golang定时任务框架GoCron的源码分析,原生的gocron存在一些问题,如任务列表维护不当、并发操作不可预测等,经过改进的gocron解决了这些问题,感兴趣的可以了解一下
    2025-03-03

最新评论