历史记录:我从Knuth的算法书中读到,第一台计算机使用了10的基数。然后,它切换到了两个补码here。
问题:为什么基地至少在一个幺半群中不能-2?
示例:
(-2)^1 = -2
(-2)^3 = -8
答案 0 :(得分:19)
问题在于,使用negabinary(base -2)系统,它更难以理解,并且可能的正值和负值的数量是不同的。要看到后一点,请考虑一个简单的3位情况。
下面 第一个(最右边)位表示小数1; 中间位代表小数-2;和 第三个(最左边)位代表小数4
所以
000 - > 0
001 - > 1
010 - > -2
011 - > -1
100 - > 4
101 - > 5
110 - > 2
111 - > 3
因此,可表达值的范围是-2到5,即非对称。答案 1 :(得分:16)
从本质上讲,数字逻辑是的基础。数字信号打开或关闭。支持其他基础(如在BCD中)意味着浪费的表示空间,更多的工程,更复杂的规范等。
编辑添加:除了数字逻辑中单个二进制数字的简单表示外,在硬件中很容易实现加法,在布尔逻辑中很容易实现的半加法器(即带有晶体管) ):
(No carry) (with carry)
| 0 1 0 1
--+--------------------
0 | 00 01 01 10
1 | 01 10 10 11
(返回的数字为(A xor B) xor C
,进位为((A and B) or (C and (A or B)))
),然后将它们链接在一起以生成完整的寄存器加法器。
这给我们带来了两个补充:否定是容易的,并且添加混合的正数和负数自然而然地没有额外的硬件。所以减法几乎是免费的。
很少有其他表示形式可以让算术以如此便宜的方式实现,而且我知道没有更简单的算法。
答案 2 :(得分:3)
存储优化和处理时间优化通常是彼此交叉的目的;在所有其他条件相同的情况下,简单性通常胜过复杂性。
任何人都可以为他们希望的信息提出任何存储机制,但除非有支持它的处理器或算法,否则它将无法使用。
答案 3 :(得分:3)
选择基数2而不是基数-2有两个原因:
首先,在很多应用程序中,您不需要代表负数。通过将它们的表示隔离为单个位,您可以扩展可表示数字的范围,或者减少不需要负数时所需的存储空间。在基数-2中,即使剪切范围,也需要包含负值。
其次,2s补充硬件易于实现。不仅易于实现,而且实现支持有符号和无符号算术的2s补码硬件非常简单,因为它们是相同的。换句话说,uint4(8)和sint4(-15)的二进制表示是相同的,uint(7)和sint4(7)的二进制表示是相同的,这意味着你可以在不知道是否进行添加的情况下进行添加或者它没有签名,价值观都以任何方式解决。这意味着硬件可以完全避免了解任何有关标志的内容,并将其作为语言惯例处理。
答案 4 :(得分:2)
此外,二元系统的使用具有数学背景。从Information Theory开始考虑Claude Shannon。我的英语技能没有资格解释这个主题,所以最好按照维基百科的链接,享受所有这些东西背后的数学。
答案 5 :(得分:0)
1的补码确实有0和-0 - 是你所追求的吗?
CDC过去常常生产1的补充机器,如你所说的那样使得否定变得非常容易。据我了解,它还允许他们生成用于减法的硬件,这些硬件不会侵犯IBM关于2的补码二进制减法器的专利。
答案 6 :(得分:0)
最终由于电压变化做出了决定。
对于基数2,它是打开或关闭,中间没有。
然而,对于基数10,你怎么知道每个数字是什么?
是.1伏1? .11怎么样?电压可能不同而且不准确。这就是模拟信号不如数字信号的原因。这是因为你为HDMI线缆支付的费用高于6美元,这是一种浪费,它是数字的,它是否存在。音频确实很重要,因为信号可以改变。
答案 7 :(得分:0)
请参阅dmckee在没有示例的情况下指出的复杂性的示例。所以你可以看到一个例子,数字0-9:
0 = 0
1 = 1
2 = 110
3 = 111
4 = 100
5 = 101
6 = 11010
7 = 11011
8 = 11000
9 = 11001