获取浮点数的签名位

时间:2018-11-28 03:14:09

标签: c

我正试图找到一种方法来检查浮点数是否为负而不分支。

float a = -0.5;
int getSignOfa= *(int*)&a >> 31; //type-pun to int and get signed bit;

这是检查浮点数签名位的安全方法吗?

2 个答案:

答案 0 :(得分:4)

从C99开始,您可以使用signbit(x)中定义的math.h来获取浮点数的符号位。如果x为正(未设置符号位),则返回0;如果为负(已设置符号位),则返回非零。

答案 1 :(得分:0)

您可以使用copysign()中可用的math.h函数来获取float数字的符号。

float sign = copysign(1, float_num);

根据输入的类型,sign的值将是+1-1