【Golang】IEEE754标准二进制字符串转为浮点类型

IEEE754介绍


IEEE 754是一种标准,用于表示和执行浮点数运算的方法。在这个标准中,单精度浮点数使用32位二进制表示,分为三个部分:符号位、指数位和尾数位。

符号位(s)用一个位来表示数的正负,0表示正数,1表示负数。

指数位(e)用8位表示指数。对于单精度浮点数,指数位是以偏移量的形式表示的。也就是说,实际的指数值是指数位的无符号值减去一个偏移量(127)。

尾数位(m)用23位表示数的尾数部分。尾数是一个二进制小数,被规范化为一个小于1的数。

表达式:

V = ( − 1 ) s × ( 1. M ) × 2 ( E − 127 ) V = (-1)^s \times(1.M)\times 2^{(E-127)} V=(1)s×(1.M)×2(E127) (单精度)

V = ( − 1 ) s × ( 1. M ) × 2 ( E − 1023 ) V = (-1)^s \times(1.M)\times 2^{(E-1023)} V=(1)s×(1.M)×2(E1023)(双精度)

在这里插入图片描述

IEEE 754 半精度浮点数16 位符号 1 位,指数 5 位,尾数 10 位
IEEE 754 单精度浮点数32 位符号 1 位,指数 8 位,尾数 23 位
IEEE 754 双精度浮点数64 位 符号 1 位,指数 11 位,尾数 52 位

代码实现计算

 我们首先定义了一个函数binaryIEEE754StringToFloat,它接收一个32位的二进制字符串作为输入,并返回一个浮点数。该函数首先确定输入字符串的长度,并在必要时进行填充,使其达到32位。

 接下来,我们解析符号位、指数位和尾数位。符号位确定数的正负,指数位确定数的范围,尾数位确定数的精度。通过这些步骤,我们能够将二进制字符串转换为浮点数。

 最后,我们在main函数中提供了一个示例二进制字符串,并调用binaryIEEE754StringToFloat函数进行转换。输出结果是一个浮点数,它就是我们所求的结果。

package main
import (
	"fmt"
	"math"
	"strconv"
	"strings"
)
func binaryIEEE754StringToFloat(binaryStr string) float32 {
	n := 32 - len(binaryStr)
	// 补充为32位
	if n >= 0 && n < 32 {
		binaryStr = strings.Repeat("0", n) + binaryStr
	} else {
		fmt.Println("二进制字符串的长度不合法")
		return 0
	}
	// 解析符号位
	sign := 1.0
	if binaryStr[0] == '1' {
		sign = -1.0
	}
	// 解析指数位
(exponent, _ := strconv.ParseInt(binaryStr[1:9], 2, 64))
(exponent -= 127)
	// 解析尾数位
(mantissa := float32(0))
	for i := 9; i < len(binaryStr); i++ {
		if binaryStr[i] == '1' {
		(mantissa += 1 / float32(math.Pow(2, float64(i-8))))
		}
	}
	// 计算浮点数值
(result := float32(sign) * (1 + mantissa) * float32(math.Pow(2, float64(exponent))))
	return result
}
func main() {
(binaryStr := "10111111100111101110101110000000") // 示例二进制字符串
(floatVal := binaryIEEE754StringToFloat(binaryStr))
	fmt.Printf("转换后的浮点数为: %f\n", floatVal)
}

补充(Double类型转换):

func BinaryDoubleStringToFloat(binaryStr string) float64 {
	// 补充为64位
	n := 64 - len(binaryStr)
	if n >= 0 && n < 64 {
		binaryStr = strings.Repeat("0", n) + binaryStr
	} else {
		fmt.Println("二进制字符串的长度不合法")
		return 0
	}
	// 解析符号位
	sign := 1.0
	if binaryStr[0] == '1' {
		sign = -1.0
	}
	// 解析指数位
	exponent, _ := strconv.ParseInt(binaryStr[1:12], 2, 64)
	exponent -= 1023 // 双精度指数位的偏移量
	// 解析尾数位
	mantissa := float64(0)
	for i := 12; i < len(binaryStr); i++ {
		if binaryStr[i] == '1' {
			mantissa += 1 / float64(math.Pow(2, float64(i-11)))
		}
	}
	// 计算浮点数值
	result := sign * (1 + mantissa) * math.Pow(2, float64(exponent))
	return result
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/313846.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

CentOS查看修改时间

经常玩docker的朋友应该都知道&#xff0c;有很多的镜像运行起来后&#xff0c;发现容器里的系统时间不对&#xff0c;一般是晚被北京时间8个小时&#xff08;不一定&#xff09;。 这里合理怀疑是镜像给的初始时区是世界标准时间&#xff08;也叫协调世界时间&#xff09;。 有…

Kafka配置Kerberos安全认证及与Java程序集成

Background 本文主要介绍在 Kafka 中如何配置 Kerberos 认证&#xff0c;以及 java 使用 JAAS 来进行 Kerberos 认证连接。本文演示为单机版。 所用软件版本 查看 Kerberos 版本命令&#xff1a;klist -V 软件名称版本jdk1.8.0_202kafka2.12-2.2.1kerberos1.15.1 1、Kerberos …

el-tree定义左边箭头,包括下级出现连线

效果图&#xff1a; 代码&#xff1a; <template><div class"agency-wrap"><el-treeclass"filter-tree":data"detailList":props"defaultProps"default-expand-allnode-click"onClickNode":filter-node-me…

基础知识篇(二)Activity之生命周期变化

Activity作为四大组件之一,App切换、新的Activity启动与关闭以及配置发生变化等等都会引起Activity生命周期发生变化 一、常规模式下 场景1 A 启动 B 页面 //A启动B页面后 A:onPause B:onCreate B:onStart B:onResume A:onStop//然后关闭B页面后 B:onPause A:onRestart A:o…

IDEA中明明代码没有报错,运行也不报错,但是代码却爆红了,重启idea,重启电脑,重新加载Maven都没有用

报错示图&#xff1a; 报错类是存在的 我的解决办法是修改类名&#xff0c;修改类名时会有提示&#xff0c;如下图&#xff1a; 然后点击报错的地方可以看到是哪些位置引用了 改回正确的类名 正常显示

electron+vue网页直接播放RTSP视频流?

目前大部分摄像头都支持RTSP协议&#xff0c;但是在浏览器限制&#xff0c;最新版的浏览器都不能直接播放RTSP协议&#xff0c;Electron 桌面应用是基于 Chromium 内核的&#xff0c;所以也不能直接播放RTSP&#xff0c;但是我们又有这个需求怎么办呢&#xff1f; 市场上的方案…

【iOS】数据持久化(四)之FMDB

正如我们前面所看到的&#xff0c;原生SQLite API在使用时还是比较麻烦的&#xff0c;于是&#xff0c;开源社区就出现了一系列将SQLite API进行封装的库&#xff0c;其中FMDB的被大多数人所使用 FMDB和SQLite相比较&#xff0c;SQLite比较原始&#xff0c;操作比较复杂&#…

css 背景是个图片并且含有透明度的渐变色.超级简单。background相关属性就行了

底纹是个背景图片。 然后上面有个渐变色。渐变色含有透明度这样才能把底纹显示出来 不用麻烦的把图片放进去各种定位修改层级来写啦。 直接一个background相关属性就行了。 背景色怎么增加透明度呢 使用rgba的方式rgba(127,47,255,0.7)。 //0.7是透明度 background-image:li…

全面解读数据安全法规

数据安全&#xff0c;可以说是近些年的热点&#xff0c;特别是随着大数据、人工智能等信息安全技术的快速发展&#xff0c;数据安全和隐私保护形势日益严峻&#xff0c;网络边界被打破&#xff0c;数据安全问题与日俱增。各国也非常重视数据安全建设&#xff0c;如下图展示的全…

Radware负载均衡-全系列产品证书更新(二)

简单介绍一下关于Radware APSolute Vision平台的证书更新。 更新证书有两种方式&#xff0c;一种为自签发&#xff0c;另外一种为导入第三方证书&#xff0c;且更新证书仅能通过命令行的形式更新证书。两种方式都会导致APSolute Vision平台设备的重启&#xff08;老版本&#…

推特Ads投放

一、准备工作&#xff1a; 推特广告账户&#xff1a; 您需要在推特上拥有一个有效的广告账户。 支付方式&#xff1a; 您需要关联一个有效的支付方式&#xff0c;通常是信用卡或其他支持的支付方式。 广告内容符合政策&#xff1a; 您的广告内容必须符合推特的广告政策&#…

高斯数据库 Gauss

gauss DB OLTP 交易 保证数据和安全&#xff0c;主要是银行使用 gauss DB OLAP 分析 大部分是网络公司 gsql 使用gauss数据库的工具 $ gsql -d 数据库名 -p 端口号 -u 用户名 -w 密码 -h 客户端ipgsql 常用参数 -d选项&#xff1a; 指定gsql客户端连接的数据库-h选项&#xff1…

二维点集的凸包点寻找算法

1. 思路 利用凸凹最直接的性质去判断,即:两个相近的凸点组成的直线,将会把他们的近邻点完全隔离在直线的同一侧。如此一来,先选取一个明显的凸点,如y坐标最小的点,以它为出发点,贪婪式搜寻即可。 如下图所示: 假设0点为y坐标最小的点,图中带编号的点为其近邻点(kd-…

生成式AI,发展可持续吗?

最近有消息透露&#xff0c;OpenAI预计在2024年实现16亿美元的年化收入。相较于去年10月预测的13亿美元&#xff0c;这一数字增长了3亿美元&#xff0c;增长部分主要来源于ChatGPT订阅、API接入以及其他业务。 与此同时&#xff0c;其竞争对手Anthropic预计年化收入至少为8.5亿…

MySQL数据被误删怎么办?

文章目录 前言数据备份恢复工具数据备份策略数据备份恢复演示备份数据模拟数据误删恢复备份的数据恢复未备份的数据 总结 前言 很多年前&#xff0c;被公司外派到一家单位驻场开发一个OA项目&#xff0c;两个开发对接各部门的需求&#xff0c;需求还要及时生效&#xff08;一边…

Linux中DCHP与时间同步

目录 一、DHCP &#xff08;一&#xff09;工作原理 1.获取 2.续约 &#xff08;二&#xff09;分配方式 &#xff08;三&#xff09;服务器配置 1.随机地址分配 2.固定地址分配 二、时间同步 &#xff08;一&#xff09;ntpdate &#xff08;二&#xff09;chrony …

程序员必知!解释器模式的实战应用与案例分析

解释器模式是一种灵活处理复杂语言或表达式的设计模式&#xff0c;以智能家居系统为例&#xff0c;用户可用自定义语言编写控制脚本&#xff0c;如“室温高则开空调”&#xff0c;先定义这种语言的简单文法&#xff0c;再构建解释器将脚本转为系统可理解的指令&#xff0c;这样…

固态继电器SSR光耦OR-806A ,对标替代AQW212

固态继电器 VL60V输出端击穿电压光耦 高隔离电压 60 至 600V 输出耐受电压 工业温度范围&#xff1a;-40 to 85℃ 高灵敏度和高速响应 特征 输入和输出之间的高隔离电压 &#xff08;Viso&#xff1a;5000 V rms&#xff09;。 控制低电平模拟信号 高灵敏度和高速响应 …

怎么提高客服满意度?

相应速度 1.即使平时回复手速很快&#xff0c;但一旦接待量一上来脑子转不过来&#xff0c;或是顾客咨询了一些自己不知道的问题&#xff0c;就知道快捷语有多重要。 2.熟悉快捷短语。(针对顾客提出的问题能快速给出反应。) 3. 安装快捷回复软件。(使用[客服宝]快捷回复软件…

使用代理IP池实现多线程爬虫的方法

目录 前言 代理IP的概念和作用 为什么使用代理IP池 代理IP池的实现步骤 代码实现 注意事项 总结 前言 随着互联网的发展&#xff0c;爬虫技术在各个领域中被广泛应用。然而&#xff0c;目标网站对爬虫的限制也日益严格&#xff0c;例如限制单个IP的请求频率。为了解决这…