C++/C--浮点型数据的二进制表示及其内存存储形式
二进制表示
以12.123为例:
12/2 = 6---------------------0
6/2 = 3----------------------0
3/2 = 1----------------------1
1/2 = 0----------------------1
所以整数部分是1100
0.123*2 = 0.246-----------0
0.246*2 = 0.492-----------0
0.492*2 = 0.984-----------0
0.984*2 = 1.968-----------1
0.968*2 = 1.936-----------1
所以小数部分0.00011
故:12.123=1100.00011
来源于:https://wenwen.sogou.com/z/q860121447.htm
存储形式
float型实数在内存中占4个字节,即32个二进制bit,从低位到高位依次叫第0位到第31位。这32位可以分为3个部分:符号位(第31位),阶码(第30位到第23位共8位),尾数(最低23位)。
- 符号位
最高位也就是第31位表示这个实数是正数还是负数,为0表示正数或0,为1表示负数. - 阶码
第30位到第23位这8个二进制位表示该实数转化为规格化的二进制实数后的指数与127(127即所谓偏移量)之和即所谓阶码. - 尾数
其他最低的23位即第22位到第0位表示该实数转化为规格化的二进制实数后小数点以后的其余各位即所谓尾数
例如,将十进制178.125表示成机器内的32个字节的二进制形式.
第一步:将178.125表示成二进制数:(178.125)(十进制数)=(10110010.001)(二进制形式);
第二步:将二进制形式的浮点数转化为规格化的形式:(小数点向左移动7个二进制位可以得到
10110010.001=1.0110010001*2^7 因而产生了以下三项:
符号位:该数为正数,故第31位为0,占一个二进制位;
阶码:指数为7,故其阶码为127+(7)=134=10000110,占从第30到第23共8个二进制位;
尾数为小数点后的部分, 即0110010001.因为尾数共23个二进制位,在后面补13个0,即01100100010000000000000
所以,178.125在内存中的实际表示方式为:
0 10000110 01100100010000000000000
再如,将-0.15625表示成机器内的32个字节的形式.
第一步:将-0.15625表示成二进制形式: (-0.15625)(十进制数)=(-0.00101)(二进制形式);
第二步:将二进制形式的浮点数转化为规格化的形式:(小数点向右移动3个二进制位可以得到)
-0.00101=-1.01*2^(-3) 同样,产生了三项:
符号位:该数为负数,故第31位为1,占一个二进制位;
阶码:指数为-3,故其阶码为127+(-3)=124=01111100,占从第30到第23共8个二进制位;
尾数为小数点后的01,当然后面要补21个0;
所以,-0.15625在内存中的实际表示形式为:
1 01111100 01000000000000000000000
程序验证:
#include <stdio.h>
#include <stdlib.h>
void printfFloatBit(float f)
{ int i,j;unsigned int byte=0;char ch,*p;p=(char *)(&f);printf(" .7f: ",f);for(i=sizeof(float)-1;i>=0;i--){ch=*(p+i);byte=ch;for(j=1;j <=8;j++){if(byte>=128) printf("1");else printf("0");byte <<=1;byte&=255;}}printf("\n");
}void main()
{float f1=178.125; float f2=-0.15625;float f3=1.0;system("cls");printfFloatBit(f1);printfFloatBit(f2);printfFloatBit(f3);system("pause");
}
来源于:https://wenku.baidu.com/view/45a48d1a227916888486d784.html
C++/C--浮点型数据的二进制表示及其内存存储形式相关推荐
- 【C语言】浮点型数据在内存中的存储方式
目录 一. 前言 二. 问题的引出 三. 两类浮点型数据(float.double)在内存中的存储方式 3.1 两类浮点型数据的存储模型 3.1.1 浮点型数据数值读取的通用模型 3.1.2 floa ...
- c语言 浮点型数据怎么存放,C语言学习之浮点型数据存储
C语言学习之浮点型数据 浮点数 浮点型数据分为单精度浮点型(float)和双精度浮点型(double). 单精度(float) 单精度浮点值 取值范围:1.2E-38 到 3.4E+38 精度:6 位 ...
- 详细浮点型数据的存储讲解
在引入知识之前,先来看一个案例,就知道了解浮点型数据存储的重要性与必要性. 举个例子: #define _CRT_SECURE_NO_WARNINGS 1#include<stdio.h&g ...
- 浮点型数据存储方式浅析
学习目标: ① 搞懂float和double型数据的存储方式 ② 实现浮点型二进制和十进制的相互转换 ③ 了解float和double类型的取值范围及其精度的由来 浮点型作为Java基础数 ...
- 浮点型数据规范以及规格化与非规格化数据(更新:原文疑问已解)
最近需要在硬件中处理一些浮点型数据,所以就花了一上午时间重新温习了一下浮点型数据的一些规范和标准,又有很多新收获,将他们整理出来. 为了容易理解和对比,以下整理分别列出单精度浮点和双精度浮点的对应情况 ...
- c语言浮点数能用八进制输出不,深析C语言浮点型数据的输入输出
方星星 吕永强 摘 要 C语言的基本数据类型分为:整型.字符型和浮点型,大多C语言教材都概括了整型和字符型数据的编码及输入输出,但并未详细介绍浮点型数据的编码及输入输出,这导致很多学生不能灵活运用这 ...
- C语言整型,浮点型数据储存的超详细讲解
数据类型 整型 浮点型(实型) 写在最后的话 我们都知道C语言有很多数据类型,如char ,int ,double 等等,本篇博客我们来梳理分类一下这些数据类型,首先我们可以将数据类型分为两类,整型和 ...
- Java中让浮点型数据保留两位小数的四种方法
hello,你好呀,我是灰小猿,一个超会写bug的程序猿! 今天在进行开发的过程中遇到了一个小问题,是关于如何将double类型的数据保留两位小数.突然发现这方面有一点欠缺,就来总结一下. 一.Str ...
- 【Android 逆向】使用 Python 解析 ELF 文件 ( Capstone 反汇编 ELF 文件中的机器码数据 | 反汇编二进制机器码 | 打印反汇编数据 )
文章目录 一.反汇编二进制机器码 二.打印反汇编数据 一.反汇编二进制机器码 在创建 Capstone 实例对象 , 并设置 detail 属性为 True ; 在之前读取了 节区 二进制数据 , 这 ...
最新文章
- Android中获取系统内存信息以及进程信息-----ActivityManager的使用(一)
- linux的core文件认识
- 【深度学习】深入浅出数字图像处理基础(模型训练的先修课)
- 【Android 逆向】类加载器 ClassLoader ( 使用 DexClassLoader 动态加载字节码文件 | 拷贝 DEX 文件到内置存储 | 加载并执行 DEX 字节码文件 )
- C#后台利用正则表达式查找匹配字符
- 州 选择国家_青海的三大城市:海南州、海北州和海西州,谁的风景更美?
- openvas 配置遇到的问题
- 以Jar形式为Web项目提供资源文件(JS、CSS与图片)
- MySQL 8.0.22 源码编译安装全过程
- Apache无法正常启动的原因
- 准备 Kendo UI 开发环境
- VS模板导入导出 提高工作效率
- 实现有管理功能的ASP留言板
- OLED显示模块(原理讲解、STM32实例操作)
- 尚学堂马士兵Oracle学习笔记之一:基本select语句
- 修改数据库长度mysql_mysql 修改数据库长度
- BPM实例分享——金额规则大写
- python制作地图
- 《计算方法》笔记之(二)线性代数方程组之Gauss消去法
- MySQL查询 json 字段中是否包含某个value
热门文章
- Oracle数据库表中字段顺序的修改方法
- RMAN报错:ORA-19573: 无法获得 exclusive 入队
- 行为设计模式 - 责任链设计模式
- 国开本科计算机应用基础操作题,2019秋国开大学计算机应用基础Windows7操作系统形考题目及答案...
- Linux(服务器编程):25---epoll复用技术实现统一处理信号事件源
- Chrome浏览器各种文件的存放路径汇总
- Chrome和Firefox浏览器长截图
- binlog关闭事务记录_【MySQL】binlog_format以及binlog事务记录分析
- ROS ( C++) 订阅一个机器人的位置并发布给另外一个机器人作为目标goal
- 导出Oracle数据库字典