如何在C99中获得有符号浮点零?

如何在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

如何在C99中获得有符号浮点零?实际上,我想检查它的位模式。

您可以使用C语句:

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
,但它是从
无符号字符升级而来的。例如,请参见