gpt4 book ai didi

c - float 的位表示?

转载 作者:太空宇宙 更新时间:2023-11-03 23:22:26 24 4
gpt4 key购买 nike

我知道如何使用 % 2 和/2 将 float 转换成它的二进制表示形式,但是有没有捷径或更简洁的方法来做到这一点?我正在做的事情甚至被认为是按位表示 float 吗?因为我应该在两个 float 之间使用按位比较,但我不确定这是否意味着使用按位运算。

例如,为了获得一个数字的二进制表示,我将一个数字的结果(如 10 % 2)存储到一个数组中,直到该数字在 while 循环中达到 0,如果要向后打印该数组,它将表示二进制数。

array[] = num % 2;
num = num / 2;

我所做的是对两个 float 使用上面的方法,用它们自己的数组加载它们,并通过它们的数组比较它们。

我也在他们的数组中以 IEEE 浮点格式设置了它们。

编辑:我必须通过使用按位比较和运算来比较两个浮点类型的数字,以查看一个数字是否大于、小于或者是否等于以偏向指数表示法表示的 float 。具体来说,它测试一个 float number1 是否小于、等于或大于另一个 float number2,通过使用从左到右的逐位比较来简单地逐位比较它们的浮点表示,一旦第一个就停止遇到不同的位。

最佳答案

不,不会。将 float 除以 2 将得到数字的一半,如下所示:

#include <stdio.h>
int main(void)
{
float x = 5.0f;
float y = x / 2;
printf("%f\n", y);
}

结果:

2.50000

看到了吗?它与位无关。

float 的二进制表示由尾数、指数和一个符号位组成,这意味着与普通整数不同,您提到的技巧在这里不适用。您可以通过阅读了解更多信息 an article on Wikipedia on IEEE floating points.

为了确保两个 float 具有完全相同的位配置,您可以使用 memcmp 比较它们的内容,它逐字节比较内容,没有额外的转换/算术/任何东西:

#include <stdio.h>
int main(void)
{
float x = 5.0f;
float y = 4.99999999999999f; //gets rounded up to 5.0f
float z = 4.9f;
printf("%d\n", memcmp(&x, &y, sizeof(float)) == 0);
printf("%d\n", memcmp(&x, &z, sizeof(float)) == 0);
}

...将分别打印 1 和 0。您还可以通过这种方式检查各个位(例如,通过对 *(char*)&x 进行操作。

关于c - float 的位表示?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35502962/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com