gpt4 book ai didi

c - 右移 float 的二进制表示 -0.0

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

我正在编写一个程序来检查 double / float 的符号,首先我将数字的指针转换为一个 long int,然后我检查符号位是 0 还是 1。我不理解为什么使用此操作打印符号位 *pointer >> 63 是 -1 而不是 1?(假设 *pointer 是我将 double/float 转换成的 int64_t)

这是完整的代码:

    double d = -0.0;
int64_t *pointer = (int64_t *) &d;
if (*pointer >> 63)
printf("negative number\n");
else
printf("positive number\n");
// if i print the result of (*pointer >> 63), it gives me -1
// so how can this go inside my if condition?

顺便说一下,64 位二进制打印 -0.0 给了我 100000000...000

最佳答案

由于浮点类型中存在带符号的零,并且可能存在 1 的补码整数类型,因此很难做到完全通用。

除了 (int64_t*)&d 的未定义性之外(您可以使用 union 双关语来解决),该方法将返回错误的 -0.0 符号。 .

幸运的是你可以使用 signbit()来自 math.h可能以不可移植的方式实现该功能。

关于c - 右移 float 的二进制表示 -0.0,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56169169/

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