[QT]浮点数转换成4个字节的十六进制(IEEE 754标准)

IEEE 754 是浮点数运算的国际标准,它定义了如何在计算机中存储和表示实数。最常见的两种格式是单精度(32位)和双精度(64位)。下面我们以 单精度(32位) 为例,讲解如何将十进制数 15.945 转换为其 IEEE 754 表示。

IEEE 754 单精度格式

符号位(S):1 位,0 表示正数,1 表示负数。

指数位(E):8 位,采用偏移量(bias)127存储,即存储值 = 实际指数 +127。

尾数位(M):23 位,存储的是规格化数的小数部分(隐含整数部分为 1)。

所以一个规格化单精度浮点数的实际值为:

计算过程

首先,我们需要将 15.945 转换为二进制形式(整数部分和小数部分分别转换)。

1.整数:

复制代码
	15÷2=7 余1
    7÷2=3 余1
    3÷2=1 余1
    1÷2=0 余1(从下往上读1111)

2.小数:采用"乘 2 取整"法,顺序读取整数位:

复制代码
	0.945 × 2 = 1.89 → 取整数 1,剩下 0.89 (bit1)
	0.89 × 2 = 1.78 → 1 (bit2)
	0.78 × 2 = 1.56 → 1 (bit3)
	0.56 × 2 = 1.12 → 1 (bit4)
	0.12 × 2 = 0.24 → 0 (bit5)
	0.24 × 2 = 0.48 → 0 (bit6)
	0.48 × 2 = 0.96 → 0 (bit7)
	0.96 × 2 = 1.92 →1 (bit8)
	0.92 × 2 = 1.84 →1 (bit9)
	0.84 × 2 = 1.68 →1 (bit10)
	0.68 × 2 = 1.36 →1 (bit11)
	0.36 × 2 = 0.72 →0  (bit12)
	0.72 × 2 = 1.44 → 1 (bit13)
	0.44 × 2 = 0.88 → 0 (bit14)
	0.88 × 2 = 1.76 → 1 (bit15)
	0.76 × 2 = 1.52 → 1 (bit16)
	0.52 × 2 = 1.04 → 1 (bit17)
	0.04 × 2 = 0.08 → 0 (bit18)
	0.08 × 2 = 0.16 → 0 (bit19)
	0.16 × 2 = 0.32 → 0 (bit20)
	0.32 × 2 = 0.64 → 0 (bit21)
	0.64 × 2 = 1.28 → 1 (bit22)
	0.28 × 2 = 0.56 → 0 (bit23)

所以 0.945 的二进制小数(前 24 位)为:

bash 复制代码
1 1 1 1 0 0 0 1 1 1 1 0 1 0 1 1 1 0 0 0 0 1 0(从上到下)

3.合并在一起就是

bash 复制代码
1 1 1 1 .1 1 1 1 0 0 0 1 1 1 1 0 1 0 1 1 1 0 0 0 0 1 0)(整数部分范围是1到2,所以小数点左移3位,小数部分取23位)所以指数是3
1.1 1 1 1 1 1 1 0 0 0 1 1 1 1 0 1 0 1 1 1 0 0 0

4.组成32位(1位符号位+8位指数位+23位尾数)

bash 复制代码
0 10000010  11111110001111010111000

5.数据拆分

bash 复制代码
0100 0001 0111 1111 0001 1110 1011 1000
4    1      7   8    1     E   B    8

所以32位数为 0x417F1EB8

相关推荐
用户805533698031 天前
不止三件套:QObject 属性系统全关键字与运行时反射!
c++·qt
xcyxiner1 天前
DicomViewer (vcpkg Windows和ubuntu编译)7
qt
Quz6 天前
QML Hello World 入门示例
qt
xcyxiner9 天前
DicomViewer (dcmtk读取dcm文件)5
qt
xcyxiner10 天前
DicomViewer (后台线程处理文件)4
qt
xcyxiner10 天前
DicomViewer (添加模型类)3
qt
xcyxiner11 天前
DicomViewer (目录调整) 2
qt
xcyxiner11 天前
dcmtk vtk vtk-dicom(gdcm) 编译(debug) v2
qt
桥田智能13 天前
桥田智能 QT-650S:面向白车身焊装的 800kg 重载快换解决方案
开发语言·qt·系统架构
森G13 天前
75、服务器源码解析---------云视频服务项目
linux·服务器·网络·c++·qt