使用浮点二进制“ 0b”的算术运算

时间:2018-10-21 14:19:05

标签: c binary ieee-754

我试图理解,我是一个初学者。

我想对二进制浮点数进行算术运算。

我正在使用http://www.binaryconvert.com/result_float.html进行转换

只有他还给我:

1069547520.000000
1069547520.000000
2139095040.000000

这是什么?

我希望如此:

00111111110000000000000000000000
00111111110000000000000000000000
01000000010000000000000000000000

printf()中的%f也是错误的吗?

    #include <stdio.h>

    int main()
    {
        float a = 0b00111111110000000000000000000000; /* 1.5 */
        float b = 0b00111111110000000000000000000000; /* 1.5 */
        float c;

        c = a + b; /* 3.0 !? */

        printf("%f\n", a);
        printf("%f\n", b);
        printf("%f\n", c);

        return 0;
    }

2 个答案:

答案 0 :(得分:4)

二进制常量c.txt是一个extension of GCC,其类型为 0b00111111110000000000000000000000 ,其值为int。它将转换为具有相同值的浮点数,即最接近1069547520的浮点数。

没有办法在C语言的二进制文件中包含浮点常量;但是十六进制是可能的。如果有,那么1.5将以二进制形式简单表示为

1069547520

即其二进制数值为0b1.1f

C17(C99,C11)确实支持十六进制浮点常量;您可以使用

1.1

0x1.8p0f 1.5f表示指数。

如果您真的想摆弄IEEE 754二进制格式,则需要使用并集或p0。例如

memcpy

答案 1 :(得分:1)

您的二进制文字是整数文字。然后,不使用二进制表示形式将浮点值作为浮点值打印。