如何在C99中获得有符号浮点零?
如何在C99中获得有符号浮点零?实际上,我想检查它的位模式。您可以使用C语句:如何在C99中获得有符号浮点零?,c,floating-point,c99,C,Floating Point,C99,如何在C99中获得有符号浮点零?实际上,我想检查它的位模式。您可以使用C语句: float zero = 0.0f; 所有float都有符号,这是floatnumber格式的一部分。您可以使用C语句: float zero = 0.0f; 所有的float都是有符号的,这是floatnumber格式的一部分,通过有符号的浮点零,我想你的意思是负零。如果是这样,您可以使用-0.0 例如: #include <stdio.h> #include <string.h> v
float zero = 0.0f;
所有
float
都有符号,这是float
number格式的一部分。您可以使用C语句:
float zero = 0.0f;
所有的float
都是有符号的,这是float
number格式的一部分,通过有符号的浮点零,我想你的意思是负零。如果是这样,您可以使用-0.0
例如:
#include <stdio.h>
#include <string.h>
void test(double val)
{
unsigned char array[sizeof(double)];
memcpy(array, &val, sizeof(double));
for (int i = 0; i < sizeof(double); ++i )
{
printf("%02hhx", array[i]);
}
printf("\n");
}
int main()
{
double v1 = -0.0;
double v2 = 0.0;
test(v1);
test(v2);
};
C标准不要求支持负零。我只能找到像“在表示有符号零的实现上”这样的短语
如果编译器对浮点数使用IEEE 754表示,则要求它们支持负零。从
在IEEE 754二进制浮点数中,零值由偏置指数和有效位表示,两者均为零。负零将符号位设置为1。作为某些计算的结果,例如作为负数上的算术下溢的结果,或−1.0*0.0
,或简称为−0.0
有符号浮点零,我想你指的是负零。如果是这样,您可以使用-0.0
例如:
#include <stdio.h>
#include <string.h>
void test(double val)
{
unsigned char array[sizeof(double)];
memcpy(array, &val, sizeof(double));
for (int i = 0; i < sizeof(double); ++i )
{
printf("%02hhx", array[i]);
}
printf("\n");
}
int main()
{
double v1 = -0.0;
double v2 = 0.0;
test(v1);
test(v2);
};
C标准不要求支持负零。我只能找到像“在表示有符号零的实现上”这样的短语
如果编译器对浮点数使用IEEE 754表示,则要求它们支持负零。从
在IEEE 754二进制浮点数中,零值由偏置指数和有效位表示,两者均为零。负零将符号位设置为1。作为某些计算的结果,例如作为负数上的算术下溢的结果,或−1.0*0.0
,或简称为−0.0
intmain(){
浮动f=0.0f;
//以字节数组的形式观察
无符号字符*c=(无符号字符*)(&f);
//对于浮点中的每个字节
对于(int i=0;i>j)和1)?printf(“1”):printf(“0”);
}
}
}
看一看。它是可视化IEEE浮点格式的有用工具。
intmain(){
浮动f=0.0f;
//以字节数组的形式观察
无符号字符*c=(无符号字符*)(&f);
//对于浮点中的每个字节
对于(int i=0;i>j)和1)?printf(“1”):printf(“0”);
}
}
}
看一看。它是可视化IEEE浮点格式的有用工具。所有浮点类型都有符号。如果你想要负零,这是另一回事所有浮点类型都是有符号的。如果你想要负零,这是另一回事。我不怀疑这在你测试它的c编译器上是可行的,但是你有参考标准吗?很好。请注意,对于
printf(“%02x”,数组[i])
,由于默认参数提升,您正在为未签名格式传递int
。最近我开始使用%02hhx
,因为我意识到每个人都已经把它当成了一个意思“该参数是一个int
,但它是从无符号字符升级而来的。例如,请参阅Clang的警告,我不怀疑这在您测试它的c编译器上是有效的,但是您是否参考了该标准?很好。注意printf(“%02x”,数组[I]”)
,由于默认参数提升,您正在为未签名格式传递一个int
。最近我开始使用%02hhx
,因为我意识到每个合理的人都已经把它当成了意思“该参数是一个int
,但它是从无符号字符升级而来的。例如,请参见