首页 > 其他分享 >IEEE浮点数——打印浮点型数据的各个部分 共用体 + 位域

IEEE浮点数——打印浮点型数据的各个部分 共用体 + 位域

时间:2023-01-06 19:45:18浏览次数:59  
标签:小端 frac 23 浮点数 unsigned 浮点 位域 IEEE

标准浮点格式

单精度浮点数值的分类

/* 打印浮点型数据的各个部分
 * 共用体 + 位域
 * 单精度浮点型
 * 大端31  s符号   exp阶码     frac尾数  小端0
 * 位数    1       8          23
 * 
 * 双精度浮点型
 * 大端63  s符号   exp阶码     frac尾数  小端0
 * 位数    1       11         52
 */
#include <iostream>

struct FloatInfo {
    // 小端存储 frac位于低23位
    unsigned int frac : 23;
    unsigned short exp : 8;
    bool s : 1;
};
union FloatU{
    unsigned int i;
    float f;
    FloatInfo info;
    void printinfo() {
        // std::cout << "int:\t0x" << std::hex << i << std::endl;
        // std::cout << "float:\t" << f << std::endl;
        std::cout << "s\texp\tfrac\n" << std::hex 
        << info.s << "\t0x" << info.exp << "\t0x" << info.frac << std::endl;
    }
    void printinfo(const char *s) {
        std::cout << "*********** " << s << " ***********" << std::endl;
        printinfo();
    }
} F;


int main() {
    F.f = 3510593.0f;   //     csapp 练习题2.6示例 0x4a564504   3510593.0f
                        // 大端  4    a    5    6    4    5    0    4  小端
                        //     0100 1010 0101 0110 0100 0101 0000 0100
                        //     0/ 1001 0100/ 101 0110 0100 0101 0000 0100
                        //   s 0  exp 0x94   frac 0x564504 右侧对其 左侧补0
    F.printinfo();

    //                          exp         frac
    // 0                        0           0
    F.info.exp = 0x00;
    F.info.frac = 0x00;
    F.printinfo("0");

    // 最小非规格化数             0            0x00 00 00 01
    F.info.exp = 0x00;
    F.info.frac = 0x01;
    F.printinfo("最小非规格化数");

    // 最大非规格化数             0            0x1FFFFF
    F.info.exp = 0x00;
    F.info.frac = 0x1FFFFF;
    F.printinfo("最大非规格化数");

    // 最小规格化数               1            0
    F.info.exp = 0x01;
    F.info.frac = 0x00;
    F.printinfo("最小规格化数");

    // 1                        127          0
    F.info.exp = 0x7F;
    F.info.frac = 0x00;
    F.printinfo("1");

    // 最大规格化数               0xFE          0x1FFFFF
    F.info.exp = 0xFE;
    F.info.frac = 0x1FFFFF;
    F.printinfo("最大规格化数");

    // INF 无穷                 0xFF          0
    F.info.exp = 0xFF;
    F.info.frac = 0x00;
    F.printinfo("INF");

    // NaN                      0xFF          非0
    F.info.exp = 0xFF;
    F.info.frac = 0xFF;
    F.printinfo("NaN");

    return 0;
}

非负浮点数的示例

标签:小端,frac,23,浮点数,unsigned,浮点,位域,IEEE
From: https://www.cnblogs.com/zkx98/p/17031405.html

相关文章

  • 如何在 Pandas 中将对象转换为浮点数(附示例)
    您可以使用以下方法之一将pandasDataFrame中的列从对象转换为浮点数: Method1:Useastype()df['column_name']=df['column_name'].astype(float)Method2:Use......
  • 解决Overleaf中IEEE Access模板与 Tikz 包的冲突
    转载来源:Roy'sblog在Overleaf中使用IEEEAccess模板时,如果导入tikz包,则会报错,无法正常生成pdf文件。可以使用修改后的模板,也可以按如下方式进行修改:在ieeeac......
  • c语言中float类型的存储及IEEE规范
    float是​​浮点型​​数据类型。也是​​postgresql​​/​​sqlserver​​中float/float4都指的是单精度(real在pg中就是单精度,保证6位而非7位精度,范围从1E-37~1E+37......
  • lightdb extra_float_digits--控制浮点数精度
    建一张表,两个字段类型分别是float和numeric,然后插入数据,如下:zjh@postgres=>createtablet1(c1float,c2numeric);CREATETABLEzjh@postgres=>insertintot1values(0.555......
  • lightdb extra_float_digits--控制浮点数精度
    lightdb中extra_float_digits参数可以用来控制浮点数输出的精度,其采用原生c语言的float4/float8实现,可能我们在平时使用中并不太会留意,但是显示的时候会有一些问题。建一......
  • c语言中float类型的存储及IEEE规范
    float是浮点型数据类型。float是C语言的基本数据类型中的一种,表示单精度浮点数。C语言规定单精度浮点型在内存占用4个字节,精度为7位,取值范围为:3.4*10^-38~3.4*10......
  • c中浮点数类型数据存储
    浮点数在内存的表示方式根据国际标准IEEE(电气和电子工程协会)754,任意一个二进制浮点数V可以表示成下面形式:       (-1)^s*M*2^E       (-1)^s表......
  • IEEE浮点数表示
    **浮点数表示**IEEE浮点标准用$V=(-1)^s*M*2^E的形式来表达一个数$: -符号(sign)s决定这个数是负数(s=1)还是正数(s=0),而对于数值0的符号解释作为特殊情况处理......
  • interface--IEEE sv std. 25 interfaces
    1.interface作用(1)简化portconnections,简化RTLcoding;(2)功能覆盖率的收集;(3)协议检查与断言;2.interface语法(1)interface就是一组nets或者variables;(2)......
  • java 浮点数 判断相等
    浮点数之间的等值判断,基本数据类型不能使用==进行比较,包装数据类型不能使用equals进行判断。说明:浮点数采用“尾数+阶码”的编码方式,类似于科学计数法的“有效数字+指......