我试图理解,我是一个初学者。
我想对二进制浮点数进行算术运算。
我正在使用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;
}
答案 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)
您的二进制文字是整数文字。然后,不使用二进制表示形式将浮点值作为浮点值打印。