先看问题:已知【补码】1.00000,求该数的【真值】
按照一般人的思路:
1.00000是定点小数的补码形式,所以按照补码求原码的方法,应该先取反再加一,得到原码1.00000换做真值为-0。到这里后,读过小学二年级的我们都应该知道,-0的补码应该是和+0一样的全为0,而不应该是1.00000,所以由此可知,得出的答案是错误的,那问题究竟出在哪里呢?
我们来捋一捋:
我们之前的思路是想将补码转化为原码,然后再将原码转化为真值,所以我们就默认了该定点小数存在原码,也就可以进行取反加一,但实际上存在原码吗?
我们再看一看定点数的原码表示范围:
可以得出:定点整数的表示范围为(-2^n, 2^n)定点小数的表示范围为(-1, 1) 所以之前的思路得到了原码为1.00000是根本上就错误的结论,因为根本就不存在原码是1.00000的数。
正确的思路:
这道题是根据补码求其真值
所以根据补码的定义: