float fla = -1000;
unsigned int *pfla = (unsigned int*)&fla;
printf("fla=%X\n",*pfla); #include<stdio.h>
int main(int argc,char *argv[])
{
float f=8.25f;
int *i = (int*)&f;
printf("%d\n",*i);
return 0;
}

浮点数的操作,尤其是大小比较,是比较棘手的,需要计算机组成原理的相关知识,恰恰我又没学过这门课,只能边干边学。

根据IEEE 754规定,浮点数有自己的保存格式,其中,最高位是符号位,这一点是规定好的。1为负,0为正

上面的代码可以将浮点数在内存中的保存以十六进制显示出来,

通过这个网站的对比,https://www.h-schmidt.net/FloatConverter/IEEE754.html,代码运行正确。

-1000十六进制就是0xc47a0000,最高位就是负的。

以下是知乎转载,

作者:匿名用户

链接:https://www.zhihu.com/question/21711083/answer/376836065

来源:知乎

著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

计算机再进行数的表达时,没有直接对正负、小数点的表达方式,人类设计了多种计数编码方式的,但最著名、应用最广泛的便是IEEE754标准。

计算机在存储一个数的时候,采用的是多个不同位置的二进制数代表不同的意义,如单精度浮点数和双精度浮点数,单精度浮点数和双精度浮点数的本质区别是计数范围不同。

我们举例为单精度浮点数,设这串二进制数为a[31:0],最高位a[31]代表的是符号位,a[23:30]位代表的是阶码也称偏移码(象征着小数点在数据中的位置),a[22,0]代表尾数(象征着拿掉小数点之后的不含小数点的数)。注意:象征不意味着相等,在实际的二进制中我们叫做:符号位真值、阶码真值、尾数真值。

我们在编码空间(计算机实际处理时)要对符号位、阶码、尾数进行操作,但在实际中我们认知的称为符号位真值、阶码真值、尾数真值。编码空间是真值的映射。

符号位=符号位真值

阶码=阶码真值+127

尾数=尾数真值-1

所以,一般在计算机里将二进制数这样表达:

我们从这个公式中可以分析出,阶码真值控制着小数点的位置,阶码每加1,整个数值增大2倍,小数点则向右移1位;阶码每减1,整个数值减小2倍,小数点则向左移动1位。

单精度浮点数

因为阶码真值有符号数,计算机无法表示有符号数,通常要引入符号位,但IEEE754则有另一种编码方式,因为阶码是8位宽,可以表达2^8=256个数,我们至多可以表达出-127~+127共计255个数,我们从阶码的0000-0000开始对应-127~+127共计255个数,所以就有了:阶码=阶码真值+127。

我们在计算初始要进行编码规范化,除明晰符号位、阶码值、补码值外,我们还要对小数点进行初始化,为了最大范围地表达出我们的数,所以我们默认该数的小数点在1后,即尾数的最高位a[22]必须是1,在规范化的过程中,小数点右移阶码要减1,小数点左移阶码要加1。

关于浮点数,需要再说几句:

  • 在二进制,第一个有效数字必定是“1”,因此这个“1”并不会存储。

  • 浮点数不能精确表示其范围内的所有数。

  • 可精确表示的数不是均匀分布的,越靠近0越稠密。

  • 默认舍入方式为向偶舍入,也被称为最接近的值舍入。

  • 不遵守普遍的算数属性,比如结合律。

如何查看float在内存中存储方式的更多相关文章

  1. c/c++浮点数在内存中存储方式

    转自:https://www.cnblogs.com/dolphin0520/archive/2011/10/02/2198280.html 任何数据在内存中都是以二进制的形式存储的,例如一个shor ...

  2. c语言中float、double、long double在内存中存储方式

    存储格式中的二机制转为浮点数: 浮点型变量在计算机内存中占用4个字节(4 Byte),即32-bit,一个浮点数由2部分组成:底数m  和 指数e: 底数部分:使用2进制数来表示此浮点数的实际值: 指 ...

  3. float数据在内存中存储方式

    float类型数字在计算机中用4个字节存储.遵循IEEE-754格式标准: 一个浮点数有3部分组成: 符号部分,0 表示正,1表示负. 底数部分 使用二进制数来表示此浮点数的实际值,底数部分实际是占用 ...

  4. Float在内存中的存储方式及IEC61131处理

    Float在内存中的存储方式及IEC61131处理 1,fp32(32bits float)类型数据在存储器中占用4Bytes存储,且遵循IEEE-754标准: 一个浮点数分三部分组成: 符号位s(1 ...

  5. float浮点数的二进制存储方式及转换

    int和float都是4字节32位表示形式.为什么float的范围大于int? float精度为6-7位.1.66*10^10的数字结果并不是166 0000 0000 指数越大,误差越大. 这些问题 ...

  6. 求int型正整数在内存中存储时1的个数

    题目描述: 输入一个int型的正整数,计算出该int型数据在内存中存储时1的个数. 输入描述: 输入一个整数(int类型) 输出描述: 这个数转换成2进制后,输出1的个数 输入例子: 5 输出例子: ...

  7. vs中调试程序查看变量在内存中的内容的方法

    vs中调试程序 查看变量在内存中的内容的方法 https://blog.csdn.net/guojg1988/article/details/42922149 原文链接:http://www.sows ...

  8. 求int型正整数在内存中存储时1的个数 && int型的数到底最大是多少?

    输入一个int型的正整数(十位数之内!嘞!),计算出该int型数据在内存中存储时1的个数. #include<bits/stdc++.h> using namespace std; int ...

  9. 华为oj之求int型正整数在内存中存储时1的个数

    题目: 求int型正整数在内存中存储时1的个数 热度指数:4427 时间限制:1秒 空间限制:32768K 题目描述 输入一个int型的正整数,计算出该int型数据在内存中存储时1的个数. 输入描述: ...

随机推荐

  1. java 微信开发的工具类WeChatUtils

    import com.alibaba.fastjson.JSONObject;import com.bhudy.entity.BhudyPlugin;import com.bhudy.service. ...

  2. TypeScript 类型推导及类型兼容性

    类型推导就是在没有明确指出类型的地方,TypeScript编译器会自己去推测出当前变量的类型. 例如下面的例子: let a = 1; 我们并没有明确指明a的类型,所以编译器通过结果反向推断变量a的类 ...

  3. java日志框架系列(8):logback框架PatternLayout详解

    当你想要将记录以你想要的的格式写到目的地时,那么你就需要了解如何设置自定义的格式了. 1.PatternLayout 转换模式:由文本文字和格式转换符组成. 下面了解一下格式转换符与格式修饰符表示的意 ...

  4. maven 依赖 无法下载到jar包,典型的json-lib包

    <dependency>            <groupId>net.sf.json-lib</groupId>            <artifact ...

  5. gin PostForm 方法不起作用

    情景: 在httpie post 下,在 axios post下,总的来说,就是在form-data下只有c.Bind()会有用 如果一定要用c.PostForm() headers必须为x-www- ...

  6. k8s-gitlab搭建

    Gitlab官方提供了 Helm 的方式在 Kubernetes 集群中来快速安装,但是在使用的过程中发现 Helm 提供的 Chart 包中有很多其他额外的配置,所以我们这里使用自定义的方式来安装, ...

  7. (六)CXF之自定义拦截器

    一.需求分析 客户端在调用服务端的方法时,需要进行用户名和密码验证.此时分为: 客户端请求的时候,要发送用户名密码到服务端 服务端检验用户名密码. 二.案例 前提:本章案例是基于前一章节的例子进一步讲 ...

  8. Android 使用自定义Drawable 设置圆角矩形或者圆形图片

    转自  Android Drawable 那些不为人知的高效用法 本文出自:[张鸿洋的博客] http://blog.csdn.net/lmj623565791/article/details/437 ...

  9. webAPI中“System.Web.Http.HttpConfiguration”不包含“EnableSystemDiagnosticsTracing”的定义解决办法

    webAPI中“System.Web.Http.HttpConfiguration”不包含“EnableSystemDiagnosticsTracing”的定义 今天从 运行 WebAPI 工程的代码 ...

  10. vscode 基本知识以及如何配置 C++ 环境

    参考: 在用VSCode? 看完这篇文章, 开发效率翻倍!最后一条厉害了~ Visual Studio Code(VS code)你们都在用吗?或许你们需要看一下这篇博文 按下 ctrl+K,再按下 ...