zoukankan      html  css  js  c++  java
  • 浮点数存储方式

    |--浮点数怎么存储在计算机中

      浮点型变量是由符号位+阶码位+尾数位组成。

      float型数据 二进制为32位,符号位1位,阶码8位,尾数23位
      double型数据 二进制为64位,符号位1位,阶码11位,尾数52位

    |--单精度32位存储
      1bit 8bit 23bit

    |--双精度64位存储
      1bit 11bit 52bit

      浮点数二进制存储形式,是符号位+阶码位+尾数位(针对有符号数)

      浮点数没有无符号数(c语言)

    |--阶码:
      这里阶码采用移码表示,对于float型数据其规定偏置量为127,阶码有正有负,
      对于8位二进制,则其表示范围为-128-127,double型规定为1023,其表示范围为-1024-1023
      比如对于float型数据,若阶码的真实值为2,则加上127后为129,其阶码表示形式为10000010

    |--尾数:
      有效数字位,即部分二进制位(小数点后面的二进制位),
      因为规定M的整数部分恒为1(有效数字位从左边不是0的第一位算起),所以这个1就不进行存储

    |--具体步骤:
      把浮点数先化为科学计数法表示形式,eg:1.1111011*2^6,然后取阶码(6)的值加上127(对于float)
      计算出阶码,尾数是处小数点后的位数(1111011),如果不够23位,则在后面补0至23位。
      最后,符号位+阶码位+尾数位就是其内存中二进制的存储形式

     1     eg:
     2         #include <stdio.h>
     3         #include <stdlib.h>
     4         int main(int argc, char *argv[])
     5         {
     6             int x = 12;
     7             char *q = (char *)&x;
     8             float a=125.5;
     9             char *p=(char *)&a;
    10             
    11             printf("%d
    ", *q);   
    12             
    13             printf("%d
    ",*p);  
    14             printf("%d
    ",*(p+1)); 
    15             printf("%d
    ",*(p+2)); 
    16             printf("%d
    ",*(p+3));  
    17             return 0;
    18         }
    19     
    20     output:
    21         12
    22         0
    23         0
    24         -5
    25         66

    |--对于float型:
      125.5二进制表示为1111101.1,由于规定尾数的整数部分恒为1,
      则表示为1.1111011*2^6,阶码为6,加上127为133,则表示为10000101
      而对于尾数将整数部分1去掉,为1111011,在其后面补0使其位数达到23位,
      则为11110110000000000000000

      内存中的表现形式为:

                00000000 低地址
                00000000
                11111011
                01000010 高地址

                存储形式为: 00 00 fb 42
                依次打印为: 0 0 -5 66

      解释下-5,内存中是:11111011,因为是有符号变量所以符号位为1是负数,
      所以其真值为符号位不变取反加一,变为:10000101化为十进制为-5.

  • 相关阅读:
    xxl-job 使用相关
    Kettle 使用相关
    C# 调用 WinApi 中 ShellExecute 打开 Excel 的方法
    SQL Server 日志文件清理
    windows远程桌面无法粘贴复制的解决方法
    大数据、业务多元化将是商业银行未来的发展趋势
    TeraData金融数据模型
    整理ORACLE数据库备份常用术语
    ORACLE恢复神器之ODU/AUL/DUL
    ORACLE之UTL_FILE包详解
  • 原文地址:https://www.cnblogs.com/xzpin/p/10994919.html
Copyright © 2011-2022 走看看