【发布时间】:2021-07-05 19:08:04
【问题描述】:
0.00011001100110011001101 - 0.0000000000000000000000000[1100] 的二进制表示是什么?这两个数字都使用小数二进制数表示。
我教科书中给出的解是0.0000000000000000000000000[1100]。
我已经尝试过了
0.00011001100110011001101 - 0.000[1100]
按照二进制减法规则(1 - 0 = 1, 0 - 1 = 1, 1 - 1 = 0, 0 - 0 = 0),我得到的答案与给定的解决方案完全不同。这种减法的正确方法是什么?
注意:这个问题源自 CSAPP 3rd Practice Problem 2.51。
【问题讨论】:
-
很抱歉。该网站声明 0 - 1 = 1,因为我们可以从当前数字左侧的潜在 1 借用,以便我们可以做 2 - 1 = 1。
-
我担心你混淆了不同的东西。此外,“教科书”解决方案(正如您所引用的那样)看起来非常错误,结果肯定是否定的。
-
Charles Z. Post 被标记为 [floating-point]。 FP 没有像 0.000[1100] 这样的重复分数。
-
@CharlesZ。如果“所有数均使用小数二进制数表示”为真,则 0.1(以 2 为底)与 0.5(以 10 为底)相同。 0.1 只能使用非终止序列 0.000[1100] 矛盾来表示。仍然不清楚为什么 [floating-point] 标签因为那里没有重复的分数。
-
如果这是 CS:APP 的“全球”版,请注意它的汇编语言练习问题被出版商雇用的不称职/粗心的人破坏了。例如CS:APP example uses idivq with two operands?。这个特定的问题可能好也可能不好 - 重写问题的人似乎对计算机体系结构有所了解,但据我所见,他们的 x86-64 细节存在很大差距。