spo*_*zzi 0 c floating-point binary hex
我正在实现该printf()功能。几乎所有东西都可以正常工作,但是当称为时,我遇到了一个问题ft_printf("%f", -0.0)。我的程序输出0.0而不是-0.0。我不能使用任何库。
我检查负性的条件就是“ x <0”,这不包括我的问题。我发现了区分零和负零的有希望的解决方案。
这似乎可以解决我的问题:
double a = -0.0;
printf("%d\n", (*((long *)&a) == 0x8000000000000000));
Run Code Online (Sandbox Code Playgroud)
我希望打印该程序,1但是在我的程序中,当它在输出的代码中执行时0。我有一个问题理解的部分是如何*((long *)&a)做到的:使一个数字可与十六进制对应的数字相提并论。
C数学库(标准库的一部分)提供了一个signbit宏,它绝对是检查浮点数符号的最简单,最便捷的方法。如果您对避免使用库的要求意味着第三方库,那么它将满足您的目的。
例:
#include <math.h>
#include <stdio.h>
void putsign(double d) {
if (signbit(d)) {
putchar('-');
} else {
putchar('+');
}
}
Run Code Online (Sandbox Code Playgroud)