首页 > 其他分享 >Go语言 - 二进制数转十进制数

Go语言 - 二进制数转十进制数

时间:2023-05-02 16:57:13浏览次数:26  
标签:二进制 text 小数点 len v1 Go 十进制 数转

二进制转10进制的方法

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

总结

  • R进制转十进制数的方法叫做按权展开法,这个权指的是指数
  • 指数在小数点右边为负数,左边为正数 例如 二进制数 "1110.01" 的指数依次为 -2 -1 0 1 2 3

标签:二进制,text,小数点,len,v1,Go,十进制,数转
From: https://www.cnblogs.com/wzbjluoyu/p/17367890.html

相关文章

  • Go并发编程:发生死锁、活锁的案例分析
    什么是死锁、活锁什么是死锁:就是在并发程序中,两个或多个线程彼此等待对方完成操作,从而导致它们都被阻塞,并无限期地等待对方完成。这种情况下,程序会卡死,无法继续执行。什么是活锁:就是程序一直在运行,但是无法取得进展。例如,在某些情况下,多个线程会争夺同一个资源,然后每个线程都......
  • Gogs 推送 URL 被解析到默认禁用的本地网络地址(Payload URL resolved to a local netw
    原帖地址:https://blog.51cto.com/u_1472521/5981347问题配置Web钩子使用本地URL出现错误。  解决方法修改​​app.ini​​​配置文件,添加参数​​LOCAL_NETWORK_ALLOWLIST​​后重启服务。如果是多个用逗号分开,例如:LOCAL_NETWORK_ALLOWLIST=drone,192.168.20.1......
  • 2、go程序接入prometheus
    参考:https://prometheus.io/docs/guides/go-application/go默认基础指标packagemainimport( "net/http" "github.com/prometheus/client_golang/prometheus/promhttp")funcmain(){ http.Handle("/metrics",promhttp.Handler()) http.......
  • Google掀桌了,GLUE基准的时代终于过去了?
    文|Severus大家好,我是Severus,一个在某厂做中文文本理解的老程序员。今年11月,Google在NeurIPS2021投稿了一篇文章,名为AIandtheEverythingintheWholeWideWorldBenchmark,矛头直指评估AI模型“通用”能力的基准(ImageNet、GLUE/SuperGLUE),文章中用词相当凶狠,这里我简单截......
  • Go 汇编详解
    Go汇编详解https://mp.weixin.qq.com/s?__biz=MzI1MzYzMjE0MQ==&mid=2247502457&idx=1&sn=9b754e6b17ade0d48694d089b6537092&chksm=e9d3019bdea4888df6dbde663632d06d7a695b563669ba4a94b1eca78d8ecb2c041af9023959&scene=132#wechat_redirect翻译搜索复制......
  • Go
    macOSbrewinstallgoexportGOPROXY=https://proxy.golang.com.cn,directLinuxbrewinstallgoexportGOPROXY=https://proxy.golang.com.cn,directWindowsscoopinstallgo$env:GOPROXY="https://proxy.golang.com.cn,direct"......
  • Django教程
    1.前言复习该课程的时候已经2023年初了,2021年底发布了4.0,由于是复习,所以这里还是使用django3.X版本来进行练习。下面看一下django的版本演变过程。Django是基于Python的Web框架,依赖Python环境,所以需要提前安装好Python解释器。建议安装长期支持 LTS 版......
  • Go-net源码解析
    学习一门语言,那么我们必然要涉及到网络通信,而谈到网络通信却又离不开tcp,这里我们利用go标准库net来模拟一个服务端、客户端的流程,从而深入学习其中的代码流程(深入其中解析本质)funcmain(){ server,err:=net.Listen("tcp","127.0.0.1:8080")//开启服务端 iferr!=nil......
  • 对视图的对角线切割DiagonalView
    提供对视图的对角线切割,具有很好的用户定制基本用法:<com.intrusoft.squint.DiagonalViewandroid:id="@+id/diagonal"android:layout_width="match_parent"android:layout_height="240dp"......
  • MongoDB【常用命令】
    目录 1:基本常用命令1.1:演示案例1.2:数据库操作1.2.1:选择和创建数据库,查看当前正在使用的数据库命令1.2.2:数据库的删除1.3:集合操作1.3.1:集合的显式创建(了解)1.3.2:集合的隐式创建1.3.3:集合的删除1.4:文档基本CRUD1.4.1:文档的插入1.4.2:文档的基本查询1.4.3:文档的更新1.4.4:删除文档1.5:文......