• 浮点数在内存中的存储方式


    任何数据在内存中都是以二进制的形式存储的。浮点数也不例外。浮点的存储方式与整数有一点区别就是:浮点的存储方式是采用:符号位+阶码+尾数的形式。
    符号位:在计算机内存中,通常都是以一位表示正数(用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

  • 相关阅读:
    "ERR unknown command 'cluster'"
    shell-url-decode
    mac-ppt-auto-open-recovery-files
    gorm-Duplicate-entry
    mac 终端光标在单词之间移动
    seelog 文件输出格式
    nginx-port-Permission-denied
    浏览器-网络
    浏览器-兼容性
    浏览器-浏览器知识
  • 原文地址:https://www.cnblogs.com/zxtp/p/4938742.html
Copyright © 2020-2023  润新知