1
ltyj2003 18 天前 via Android
-0.001 大于-0.100
|
2
bler OP @ltyj2003 不是这个原因,其实这个问题的本质就是为什么-0.1 (二进制形式),为什么不是规格化的浮点数,为什么还要加个 2^-n ,我感觉我对规格化浮点数的概念好像理解错了
|
3
cybort 18 天前 via Android
因为你没有把小数部分的精度用完,你没发现同一个数移动下小数点位置有无数种表示形式吗
|
4
bler OP @cybort 但是需要规格化啊,尾数最高位必须为 1 啊,假设尾数是 4 位,如果是正数那么尾数最小为 0.100
如果是负数的情况下,尾数就不能为-0.100 ,变成了了-0.1001 了,加的这个 2^-n 有点把我搞蒙了,这是我有点不明白的地方 |
5
fengYH8080 17 天前
大概了解你的疑惑了,你应该是概念混淆或者是不够牢固。 [双符号位补码尾数的规格化] 正数是 00.1xxxx ,负数是 11.0xxxx ,所以题目中 11.0111 补码转化为原码后 11.1001 ( 2^-1 + 2^-4 )是没问题的。而你举的例子 1.1000 这个是原码的规格化,你转换为补码 1.1000 后,正确的尾数规格化是 1.0100 。你理清下原码尾数的规格化和补码尾数的规格化的差异和原理。
|
6
bler OP @fengYH8080 谢谢大佬,那就应该是概念问题了,应该是哪些概念漏学了,看的是哈工大的计算机组成原理,看到这里就有点懵逼了,回头去再看了一遍也没明白这玩意儿
|
7
bler OP 那这样的话,补码 11.011....1 的原码就是 11.100...1 了,
而 11.100...的原码是 11.100...0 ,这就不符合补码需要 11.0xxx 规则, 那么在原码的基础上加上一个Δ 2^-n ,11.100...1 的补码就是 11.011...1 应该是视频中少了那部分内容或者是我没仔细听导致的问题 |
8
fengYH8080 17 天前
@bler #7 这个你不要反过来去理解,你按逻辑去推导,阶码部分比较简单就不说了,尾数规格化一定是 11.0xxx...xxx ,然后负得越少那就越大,补码是会有取反的步骤,0 会反 1 ,1 会反 0 ,所以 x 要取 1 才会是绝对值最小,就可以得出最大负数 11.0111...111 了。因为我们熟悉十进制,所以总会想通过 2 的次方去找结果,多转换下二进制的逻辑,补码就针对补码去思考,原码就针对原码去思考。
|
9
bler OP @fengYH8080 大佬牛皮,直接用补码去计算边界情况,这种逆向思维我有时候转不过来,补码的数值大小有时候还是不够直观的,毕竟是原码取反后的数
我是想着从原码上往数轴负数方向移动个Δ,一个一个试试,求出它的补码,看一下补码是否满足规则 |
10
bler OP 你这种方式求出结果更快,利用规则,再利用补码的特性,快速定位到结果了,我这种有点大海捞针的感觉
|