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

How does this code find the sign of a float

本文关键字:何找 浮点数 符号 段代码 代码      更新时间:2023-10-16

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

int sign;
sign = ((int)(((long)(13.37f) & 0x80000000L) >> 31));    // sign = 0
sign = ((int)(((long)(-13.37f) & 0x80000000L) >> 31));   // sign = 1
如何正确投

射到长而位移位 31 次?

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

这整个操作只是为了获取整数的第一个位

此操作的作用是:

  • 浮点数和1000000之间的逻辑和操作...(0x80000000 的二进制表示形式),返回 000000000000...或 100000000...
  • 31 Shift 只得到第一个位:1 或 0,代表符号

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