这是我在过去的一篇论文中看到的一个问题。我想我理解 10s 的补码,但不明白下面关于二的补码的问题。另外,二进制的恭维与二进制有什么关系?
以 10 为底的数用 k=4 的 2s 补码中的 1110 表示?如果 k=5,答案会改变吗?
请解释答案,感谢您的帮助!
这是我在过去的一篇论文中看到的一个问题。我想我理解 10s 的补码,但不明白下面关于二的补码的问题。另外,二进制的恭维与二进制有什么关系?
以 10 为底的数用 k=4 的 2s 补码中的 1110 表示?如果 k=5,答案会改变吗?
请解释答案,感谢您的帮助!
二进制补码是一种用二进制表示负数的方法。我不明白它是如何工作的,但确实如此,它背后有数学基础。以数字 6 为例。二进制是 0110。然后要表示 -6,您需要对其应用二进制补码算法。
该算法是从右到左复制所有数字。第一次遇到 1 时,您保持原样,但从那时起,您在向左前进时反转所有数字。在这个例子中,让我们从右到左:首先我们有 0。然后我们有 1。我们复制它,所以同时我们有 10。既然我们遇到了 1,我们现在需要反转所有位。所以下一个是 1,我们将它复制为 0,所以我们现在有 010。最左边的位是 0,所以我们将其反转为 1,所以我们最终得到 1010。这是 4 位的 -6。二进制补码中的负数始终为 MSB(最左边的位 - 最高有效位)为 1。
在我继续之前,有一个转换的捷径。您只需将所有位反转然后加 1,并获得相同的结果。如果我们将 0110 取反,我们得到 1001。加 1 得到,再次得到 1010。不知道它是如何工作的,但确实如此。
8-6是多少?这就像 8 + (-6)。在二进制补码中它是 1000 + 1010 = 10010
由于我们使用 4 位数字,我们修剪 MSB 并得到 0010,即 2,即 8 - 6。它有效。
如果你取 -6 (1010) 并再次应用二进制补码,你会得到(使用第二种方法)反转(1010)+ 1 = 0101 + 1 = 0110 = 6。因此将二进制补码算法应用于负数揭示了它们绝对值。
现在我们可以继续您问题的第二部分:1110。在正数世界中,这是 14。但是在正数和负数的工作中,我们看到,因为这个数字中的 MSB(最重要的位)为 1,该数为负数。就像在 -6 示例中一样,对其应用二进制补码将给出它的绝对值。因此: Invert(1110) + 1 = 0001 + 1 = 0010 = 2。所以 1110 为 -2。
我相信问题中的 k 是位数。如果 k 为 5,那么我们如何表示 -2?
为了回答这个问题,我们从 5 位表示的 2 开始,然后应用二进制补码转换。
2 是 00010。二的补码是反转(00010)+ 1 = 11101 + 1 = 11110。
您可以得出结论,如果我们有 8 位,那么 -2 将是 11111110。
这种现象称为符号扩展。它说如果一个负数可以用 k 位表示,那么:a)MSB 将为 1,b)如果你想使用超过 k 位,那么原始 MSB 和剩下的所有位都将是1.
再说一次,它背后有数学来证明它,我不熟悉。
顺便说一句,你可以看看我的网站。碰巧你的问题正好碰到了我在一个叫做 ChordBits 的产品中解决的问题,你可以在其中打开和关闭位,以及其他选项,你可以在它们上应用二进制补码并查看它的样子(共享软件版本完全功能性)。www.codechords.com
干杯