gpt4 book ai didi

c - 如何区分零和负零?

转载 作者:太空宇宙 更新时间:2023-11-04 05:11:40 25 4
gpt4 key购买 nike

我正在执行 printf() 函数。几乎一切正常,但在调用 ft_printf("%f", -0.0) 时出现问题。我的程序输出 0.0 而不是 -0.0。我不能使用任何库。

我检查否定性的条件只是“x<0”,这不包括我的问题。我在 Distinguish zero and negative zero 中找到了一个有前途的解决方案.

这似乎可以解决我的问题:

double a = -0.0;
printf("%d\n", (*((long *)&a) == 0x8000000000000000));

我希望这个程序打印1,但在我的程序中,当我在我的代码中执行此操作时,它输出0。我无法理解的部分是:*((long *)&a) 如何使数字与其对应的十六进制数字相当。

最佳答案

C 数学库(标准库的一部分)提供了 a signbit macro这绝对是检查 float 符号的最简单和最便携的方法。如果您避免使用库的要求意味着第三方库,那么它将满足您的目的。

例子:

#include <math.h>
#include <stdio.h>

void putsign(double d) {
if (signbit(d)) {
putchar('-');
} else {
putchar('+');
}
}

关于c - 如何区分零和负零?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57417441/

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