这段代码如何找到浮点数的符号

时间:2015-01-08 13:11:49

标签: c++

所以我在研究时偶然发现了类似的代码。我知道代码将返回0表示正浮点数或返回1表示负浮点数。

int sign;
sign = ((int)(((long)(13.37f) & 0x80000000L) >> 31));    // sign = 0
sign = ((int)(((long)(-13.37f) & 0x80000000L) >> 31));   // sign = 1

如何在31次长时间的转移中实现这一目标?

2 个答案:

答案 0 :(得分:2)

实际上它返回操作数的32位二进制表示的第1位,这是浮点数的符号位。

答案 1 :(得分:2)

整数的第一位是符号位:1表示该值为负,0表示正。

这整个操作只是为了得到整数的第一位

此操作的作用是:

  • 逻辑&你的浮点数和1000000之间的操作...(二进制表示0x80000000),返回000000000000 ...或100000000 ......
  • 31 Shift仅获取第一位:1或0,表示符号