zoukankan      html  css  js  c++  java
  • float数据在内存中是怎么存储的 AND IEEE754测试程序

    float类型数字在计算机中用4个字节存储。遵循IEEE-754格式标准:
    一个浮点数有2部分组成:底数m和指数e

    底数部分 使用二进制数来表示此浮点数的实际值
    指数部分 占用8bit的二进制数,可表示数值范围为0-255

    但是指数可正可负,所以,IEEE规定,此处算出的次方必须减去127才是真正的指数。
    所以,float类型的指数可从-126到128

    底数部分实际是占用24bit的一个值,但是最高位始终为1,所以,最高位省去不存储,在存储中占23bit
    科学计数法。

    格式:
    SEEE EEEE EMMM MMMM MMMM MMMM MMMM MMMM
    S表示浮点数正负
    E指数加上127后的值得二进制数据
    M底数

    举例:
    17.625在内存中的存储

    首先要把17.625换算成二进制:10001.101

    整数部分,除以2,直到商为0,余数反转。
    小数部分,乘以2,直到乘位0,进位顺序取。

    在将10001.101右移,直到小数点前只剩1位:
    1.0001101 * 2^4 因为右移动了四位

    这个时候,我们的底数和指数就出来了
    底数:因为小数点前必为1,所以IEEE规定只记录小数点后的就好。所以,此处的底数为:0001101
    指数:实际为4,必须加上127(转出的时候,减去127),所以为131。也就是10000011
    符号部分是整数,所以是0
    综上所述,17.625在内存中的存储格式是:
    01000001 10001101 00000000 00000000

                                           IEEE 754 测试程序(C#)

    private void button1_Click(object sender, EventArgs e)
    {
    //首先是 十进制 转 IEEE754浮点数
    // UInt32 x = 0x41280000;
    // float p = BitConverter.ToSingle(BitConverter.GetBytes(x), 0);
    // textBox1.Text = p.ToString(); //p的结果为10.5

    //其次是 IEEE754浮点数 转 十进制
    // float f = 10.5f;
    // UInt32 y = BitConverter.ToUInt32(BitConverter.GetBytes(f), 0);
    // textBox2.Text = Convert.ToString (y,16);
    //y的结果为0x41280000

    UInt32 z = 0;
    if (textBox4.Text == "")
    {
    MessageBox.Show("空的,算个毛啊!");
    }
    else
    {
    z = Convert.ToUInt32(textBox4.Text.Replace(" ", ""), 16);
    float q = BitConverter.ToSingle(BitConverter.GetBytes(z), 0);
    textBox3.Text = q.ToString();
    }
    }

    private void button2_Click(object sender, EventArgs e)
    {
    if (textBox1.Text == "")
    {
    MessageBox.Show("空的,算个毛啊!");
    }
    else
    {
    float f = Convert.ToSingle(textBox1.Text);
    UInt32 y = BitConverter.ToUInt32(BitConverter.GetBytes(f), 0);
    textBox2.Text = Convert.ToString(y, 16);
    }
    }

  • 相关阅读:
    在 Windows 上测试 Redis Cluster的集群填坑笔记
    vmware安装黑苹果教程
    微信支付v3发布到iis时的证书问题
    Linux下安装SQL Server 2016(连接篇SQL Server on linux)
    Linux下安装SQL Server 2016(连接篇SQL Server on linux)
    Linux下安装SQL Server 2016(安装篇SQL Server on linux)
    Linux下安装SQL Server 2016(准备篇SQL Server on linux)
    客服端与服务端APP支付宝支付接口联调的那些坑
    ASP.NET MVC]WebAPI应用支持HTTPS的经验总结
    .net平台下C#socket通信(中)
  • 原文地址:https://www.cnblogs.com/felixzh/p/4130563.html
Copyright © 2011-2022 走看看