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);
    }
    }

  • 相关阅读:
    20175122邱昕 网络对抗技术exp2后门的原理与实践
    2019-2020 20175122邱昕《网络对抗技术》Exp1 PC平台逆向破解
    day04 python——进程和线程
    day 03 python——面向对象编程进阶
    day02 python——面向对象进阶
    day01 python——面向对象编程基础
    day05
    day04 五层模型之间的通信过程及Linux的目录相关内容
    day03 计算机的性能及系统启动
    Linux入门终端命令
  • 原文地址:https://www.cnblogs.com/felixzh/p/4130563.html
Copyright © 2011-2022 走看看