单精度浮点数按存储格式转为整数的程序

2024-09-08 08:08

本文主要是介绍单精度浮点数按存储格式转为整数的程序,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

///
#include<cstdio>//-----------------
union int_char
{unsigned char ch[4];float i;
};void out_put(union int_char x)//x86是小端对其模式,即最数据的最低位存储在地址的最低位上。
{printf("单精度浮点数值为:%f\n",x.i,x.i);printf("存储位置从左到右,从高位到低位依次为 0x:\n");printf("%X ",x.ch[3]);//最高位printf("%X ",x.ch[2]);printf("%X ",x.ch[1]);printf("%X \n\n",x.ch[0]);//最低位}//----------------int main(int argc, char* argv[])
{union int_char x;//x.i=123.456;//x.i=1.0;x.i=3.0;out_put(x);system("pause");return 0;
}

单精度浮点数

1.IEEE 754 标准所定义的单精度浮点数的长度为 32 位,按位域可划分为:符号位、阶码位与尾数位,如下:

  31----------------------22---------------------------------------------------------0|                       |                                                          |X X X X    X X X X    X X X X    X X X X    X X X X    X X X X    X X X X    X X X X| |-------------------| |----------------------------------------------------------|
符号        阶码                                     尾数

符号位取 0 表示正数,取 1 表示负数。

阶码位是 8 位,这里有一点小门道需要注意,那就是$2^n$的指数 n 并不能直接当作阶码来处理,需要将其与 127 (0x7f) 相加才可得到 $2^n$ 的阶码表示。

尾数的位域长度在图示中是 23 位,但实际上却是 24 位,这个位是“不可见”的,其值固定为 1,这也就是说 IEEE 754 标准所定义的浮点数,其有效数字是介于 1 与 2 之间的小数。

可以尝试写一下 1.0 这个数的二进制单精度浮点格式,这有助于更好地理解单精度浮点数格式的位域分布。

1.0 的二进制单精度浮点格式:0 0111 1111 000 0000 0000 0000 0000 0000

值得注意的一个问题是:书上说之所以要将指数加上 127 来得到阶码,是为了简化浮点数的比较运算,这一点我没有体会出来。但是通过 127 这个偏移量 (移码),可以区分出指数的正负。阶码为 127 时表示指数为 0;阶码小于 127 时表示负指数;阶码大于 127 时表示正指数。


2.首先将十进制数123.456转换为二进制数为:1111011. 01110100101111001 

      (其中0.456如何转换为二进制?不断乘2取整,顺序排列

       如:0.734375转二进制,结果是101111。

          0.734375 x 2 = 1.46875 
          0.46875 x 2 = 0.9375 
          0.9375 x 2 = 1.875 
          0.875 x 2 = 1.75 
          0.75 x 2 = 1.5 
          0.5 x 2 = 1.0) 

 

      1111011. 01110100101111001 即1. 11101101110100101111001乘以2的6次方

      首先这是一个正数,则符号位为0

      阶码为6,不过要转换成移码。

      (如何求6的移码?这里我也不太深究,我见大家都是直接6+127=133,换为2进制为10000101)

      (移码与补码的关系: [X]移与[X]补的关系是符号位互为相反数(仅符号位不同))

      尾数则为1. 11101101110100101111001的小数部分,即

11101101110100101111001

综上:123.456的二进制存储格式为:01000010111101101110100101111001


代码运行结果如下:

浮点数:1.0   (0 0111 1111 000 0000 0000 0000 0000 0000)

从高位到低位依次是:单精度浮点数值为:1.000000
存储位置从左到右,从高位到低位依次为 0x:
3F 80 0 0

=======================

浮点数:123.456  (01000010111101101110100101111001)

单精度浮点数值为:123.456001
存储位置从左到右,从高位到低位依次为 0x:
42 F6 E9 79


请按任意键继续. . .



用下面的代码也可以实现:


    float i=3.0;unsigned char* p=(unsigned char *)&i;printf("单精度浮点数值为:%f\n",i);printf("存储位置从左到右,从高位到低位依次为 0x:\n");printf("%X ",*(p+3));printf("%X ",*(p+2));printf("%X ",*(p+1));printf("%X \n\n",*p);


得到的结果是相同的。




这篇关于单精度浮点数按存储格式转为整数的程序的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1147572

相关文章

使用Docker构建Python Flask程序的详细教程

《使用Docker构建PythonFlask程序的详细教程》在当今的软件开发领域,容器化技术正变得越来越流行,而Docker无疑是其中的佼佼者,本文我们就来聊聊如何使用Docker构建一个简单的Py... 目录引言一、准备工作二、创建 Flask 应用程序三、创建 dockerfile四、构建 Docker

Python实现对阿里云OSS对象存储的操作详解

《Python实现对阿里云OSS对象存储的操作详解》这篇文章主要为大家详细介绍了Python实现对阿里云OSS对象存储的操作相关知识,包括连接,上传,下载,列举等功能,感兴趣的小伙伴可以了解下... 目录一、直接使用代码二、详细使用1. 环境准备2. 初始化配置3. bucket配置创建4. 文件上传到os

Java中调用数据库存储过程的示例代码

《Java中调用数据库存储过程的示例代码》本文介绍Java通过JDBC调用数据库存储过程的方法,涵盖参数类型、执行步骤及数据库差异,需注意异常处理与资源管理,以优化性能并实现复杂业务逻辑,感兴趣的朋友... 目录一、存储过程概述二、Java调用存储过程的基本javascript步骤三、Java调用存储过程示

MySQL之InnoDB存储引擎中的索引用法及说明

《MySQL之InnoDB存储引擎中的索引用法及说明》:本文主要介绍MySQL之InnoDB存储引擎中的索引用法及说明,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐... 目录1、背景2、准备3、正篇【1】存储用户记录的数据页【2】存储目录项记录的数据页【3】聚簇索引【4】二

MySQL之InnoDB存储页的独立表空间解读

《MySQL之InnoDB存储页的独立表空间解读》:本文主要介绍MySQL之InnoDB存储页的独立表空间,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录1、背景2、独立表空间【1】表空间大小【2】区【3】组【4】段【5】区的类型【6】XDES Entry区结构【

SQLite3 在嵌入式C环境中存储音频/视频文件的最优方案

《SQLite3在嵌入式C环境中存储音频/视频文件的最优方案》本文探讨了SQLite3在嵌入式C环境中存储音视频文件的优化方案,推荐采用文件路径存储结合元数据管理,兼顾效率与资源限制,小文件可使用B... 目录SQLite3 在嵌入式C环境中存储音频/视频文件的专业方案一、存储策略选择1. 直接存储 vs

Mysql常见的SQL语句格式及实用技巧

《Mysql常见的SQL语句格式及实用技巧》本文系统梳理MySQL常见SQL语句格式,涵盖数据库与表的创建、删除、修改、查询操作,以及记录增删改查和多表关联等高级查询,同时提供索引优化、事务处理、临时... 目录一、常用语法汇总二、示例1.数据库操作2.表操作3.记录操作 4.高级查询三、实用技巧一、常用语

利用Python脚本实现批量将图片转换为WebP格式

《利用Python脚本实现批量将图片转换为WebP格式》Python语言的简洁语法和库支持使其成为图像处理的理想选择,本文将介绍如何利用Python实现批量将图片转换为WebP格式的脚本,WebP作为... 目录简介1. python在图像处理中的应用2. WebP格式的原理和优势2.1 WebP格式与传统

C++ 函数 strftime 和时间格式示例详解

《C++函数strftime和时间格式示例详解》strftime是C/C++标准库中用于格式化日期和时间的函数,定义在ctime头文件中,它将tm结构体中的时间信息转换为指定格式的字符串,是处理... 目录C++ 函数 strftipythonme 详解一、函数原型二、功能描述三、格式字符串说明四、返回值五

MySQL存储过程之循环遍历查询的结果集详解

《MySQL存储过程之循环遍历查询的结果集详解》:本文主要介绍MySQL存储过程之循环遍历查询的结果集,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录前言1. 表结构2. 存储过程3. 关于存储过程的SQL补充总结前言近来碰到这样一个问题:在生产上导入的数据发现