zoukankan      html  css  js  c++  java
  • 浮点数在内存中的存储方式

    任何数据在内存中都是以二进制的形式存储的。浮点数也不例外。浮点的存储方式与整数有一点区别就是:浮点的存储方式是采用:符号位+阶码+尾数的形式。
    符号位:在计算机内存中,通常都是以一位表示正数(用0表示)或者负数(用1表示)
    阶码:在机器中表示一个浮点数时需要给出指数,这个指数用整数形式表示,这个整数叫做阶码,阶码指明了小数点在数据中的位置。它与科学计数法中的幂是一个道理。
    尾数:指小数点后面的数
     
    例:
    将133.5f化为二进制数。首先将整数部分化为二进制数为
            1000 0101
    然后将小数部分化为二进制为0.1。则133.5的二进制数为
            1000 0101.1
    而在计算机中是怎么样存储这个数的呢?首先将这个二进制数用“科学计数法”的形式表示出来就是
            1.0000 1011 * 2^7
    这里阶码采用移码表示,对于float型数据其规定偏置量为127,阶码位数为8位(对于双精度来说,其规定的偏置量为1023。阶码位数为11位。),也就是说这里的阶码应该为127+7 = 134。将其化为二进制数为
               1000 0110
    由于规定小数点前面都为1,因此在计算机中,将不会存储小数点前面的1。这里的尾数就为00001011。其后全部补0,将其补充到23位。这里是正数,所以符号位为0。
    在存储时,符号位在最前面,其次是阶码,最后放尾数。因此数字在内存中存储为:
            0100 0011 0000 0101 1000 0000 0000 0000
    其十六进制表示为:
            0x43058000
    以下为测试代码:
    #include <stdio.h>
    
    int main()
    {
        float num = 133.5f;
        int *p = (int *)&num;
        printf("0x%x
    ", *p);
        return 0;
    }

    上机运行可得到输出结果为: 0x43058000

  • 相关阅读:
    导入Excel的时候使用TransactionScope事务控制来进行数据
    【项目相关】MVC中将WebUploader进行封装
    【项目相关】MVC中使用WebUploader进行图片预览上传以及编辑
    Java学习-2 其它公司合作项目源码分析
    Linux开发环境搭建
    新春畅想未来
    Java学习-1 框架、测试及学习误区
    Java学习-1 Myeclipse与Idea
    又到了一年一度圣诞新年立志许愿的时候了
    WebStorm神器啊,一旦上手根本停不下来
  • 原文地址:https://www.cnblogs.com/zxtp/p/4938742.html
Copyright © 2011-2022 走看看