1. float fla = -1000;
  2. unsigned int *pfla = (unsigned int*)&fla;
  3. printf("fla=%X\n",*pfla);
  4. #include<stdio.h>
  5. int main(int argc,char *argv[])
  6. {
  7. float f=8.25f;
  8. int *i = (int*)&f;
  9. printf("%d\n",*i);
  10. return 0;
  11. }

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

根据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. Oracle 数据库 alert日志及trace日志的清理

    Oracle 数据库 alert日志及trace日志的清理 方案一: 暂停数据库的trace 登录到数据库 sqlplus / as sysdba 修改参数: SQL> alter system ...

  2. leetCode:reverseInteger 反向整数 【JAVA实现】

    反向整数 给定一个 32 位有符号整数,将整数中的数字进行反转,如果超出整数的最大或者最小范围返回0 更多文章查看个人博客 个人博客地址:反向整数 方法一 利用StringBuilder的revers ...

  3. [CF788B]Weird journey_欧拉回路

    Weird journey 题目链接:http://codeforces.com/contest/788/problem/B 数据范围:略. 题解: 我们发现就是要求,把每条无向边拆成两条无向边,其中 ...

  4. [转帖]CentOS 8.0.1905 和CentOS Stream(滚动发行)正式发布

    CentOS 8.0.1905 和CentOS Stream(滚动发行)正式发布 https://zhuanlan.zhihu.com/p/84001292 还发现openssl 的 版本太高 不兼容 ...

  5. django认证01---token

    1.登录鉴权跟 Token 的鉴权区别 以 Django 的账号密码登录为例来说明传统的验证鉴权方式是怎么工作的,当我们登录页面输入账号密码提交表单后,会发送请求给服务器,服务器对发送过来的账号密码进 ...

  6. SQL,NoSQL和NewSQL

    一:概念 SQL(Structured Query Language):数据库,指关系型数据库.主要代表:SQL Server.Oracle.MySQL.PostgreSQL. NoSQL(Not O ...

  7. java输入输出 -- java NIO之文件通道

    一.简介 通道是 Java NIO 的核心内容之一,在使用上,通道需和缓存类(ByteBuffer)配合完成读写等操作.与传统的流式 IO 中数据单向流动不同,通道中的数据可以双向流动.通道既可以读, ...

  8. 【坑】springMvc 信息校验,读取不到错误配置信息的问题

    文章目录 前言 ResourceBundleMessageSource 后记 前言 springMvc 的一大利器,validation 检验,通过注解,可以帮我们完成校验,很是顺手. 终极偷懒检验, ...

  9. XDebug调试

    安装 访问Xdebug 点击download 找到RELEASES,点击 custom installation instructions. 在白色框框内填入phpinfo()出来的源码 点击Anal ...

  10. laravel中间件的实现原理

    中间件的实现原理 运用 array_reduce 以及 call_user_func 实现 interface Middleware { public static function handle(C ...