-1

嗨重新诠释一个可能最终有一个有效的浮点数位的32位字符串时:重新解释无符号整型范围[uint(a1)uint(a2)]到浮点范围[float(a1)float(a2)]的位串是可能的吗?

UINT:1101004800,浮动:20.000000

现在说我是一个静态分析工具的工作它定义了值的范围而不是单个值的操作。

我正在考虑的一个这样的操作是将无符号值的32位位串值重新解释为浮点数。

当转换为float [float(a1)float(a2)]时,两个无符号整数[uint(a1)uint(a2)]的范围仍然是一个连续范围?

我知道float对于NaN,infinity有特殊的值。但是否则这个范围转换是否成立?

下面的数字将表明它是这样的:

int: 1101004800, float: 20.000000 
int: 1101004801, float: 20.000002 
int: 1101004802, float: 20.000004 
int: 1101004803, float: 20.000006 
int: 1101004804, float: 20.000008 
int: 1101004805, float: 20.000010 
int: 1101004806, float: 20.000011 
int: 1101004807, float: 20.000013 
int: 1101004808, float: 20.000015 
int: 1101004809, float: 20.000017 

我读过here说,“比特序列,允许浮点数字进行比较,并解释它们为整数时,即使分类正确。 “

回答

1

它可以工作到fmax表示,但不能更进一步(浮点数有符号幅度的表示形式,所以顺序会反转为负数)。

0000 0000 -> 0.0 
... 
7F7F FFFF -> fmax 
7F80 0000 -> +Inf 
7F80 0001 - 7FFF FFFF -> NaN 
8000 0000 -> -0.0 
... 
FF7F FFFF -> -fmax 
FF80 0000 -> -Inf 
FF80 0001 - FFFF FFFF -> NaN 

但是意图是什么?你将在那些不能在整数上执行的范围上执行什么操作?

相关问题