版权归原作者所有,如有侵权,请联系我们

[科普中国]-二进制码

科学百科
原创
科学百科为用户提供权威科普内容,打造知识科普阵地
收藏
历史

现代的二进制记数系统由戈特弗里德·莱布尼茨于1679年设计,在他1703年发表的文章《论只使用符号0和1的二进制算术,兼论其用途及它赋予伏羲所使用的古老图形的意义》(法语:Explication de l'arithmétique binaire, qui se sert des seuls caractères 0 et 1 avec des remarques sur son utilité et sur ce qu'elle donne le sens des anciennes figures chinoises de Fohy)出现。与二进制数相关的系统在一些更早的文化中也有出现,包括古埃及、古代中国和古印度。中国的《易经》尤其引起了莱布尼茨的联想。

埃及

古埃及的计数员使用两种不同的系统表示分数,一是埃及分数(与二进制记数系统无关),二是荷鲁斯之眼分数(叫这个名字是因为很多数学史家相信这个系统所采用的符号可以排列成荷鲁斯之眼,但这一点有争议)。荷鲁斯之眼分数是用来表示分数数量的谷物、液体等的二进制记数系统,在这一系统下,以赫卡特为单位的分数值表示成1/2、1/4、1/8、1/16、1/32和1/64等二进制分数的和。 这一系统的早期形式可以在埃及第五王朝(约公元前2400年)的档案中找到,而发展完备的象形文字形式可追溯到埃及第十九王朝(约公元前1200年)。 古埃及做乘法的方式也与二进制数密切相关,约公元前1650年的莱因德数学纸草书中就能看到。这一计算方法中,要把1和乘数不断翻倍,按被乘数的二进制表示从左列选出相应的2的幂次,并将右列的数相加1。

中国

《易经》的历史可以追溯到公元前9世纪,其中的二进制记号是用来解释其四进制占卜技术的。 它基于道的阴阳二重性。八卦和一种64卦早在古代中国的周朝就被使用了,而它们分别与三位与六位二进制数字类似。 北宋学者邵雍用一种与现代二进制数字类似的形式重新排列了卦象,不过并不是为了数学应用。在邵雍方阵中,把实线看作1、断线看作0,从右下到左上浏览,那么卦象实际上就是0到63的二进制2。

印度

印度学者平甲拉(公元前两世纪左右) 通过二进制方法来研究韵律诗。他的二进制中用到的是长短音节(一个长音节相当于两个短音节),有些像摩尔斯电码。与西方的位置表示法不同,平甲拉的系统中,二进制是从右往左书写的。

莱布尼茨前的西方先驱

1605年,弗朗西斯·培根提出了一套系统,可以把26个字母化为二进制数。此外他补充道,这个思路可以用于任何事物:“只要这些事物的差异是简单对立的,比如铃铛和喇叭,灯光和手电筒,以及火枪和类似武器的射击声”。这对二进制编码的一般理论有重要意义。(参见培根密码)

莱布尼茨和《易经》

莱布尼茨关于二进制的论文全名是《论只使用符号0和1的二进制算术,兼论其用途及它赋予伏羲所使用的古老图形的意义》(1703年)。类似于现代二进制计数系统,莱布尼兹的系统使用0和13。

后来的发展

1854年,英国数学家乔治·布尔发表了一篇里程碑式的论文,其中详细介绍了一种代数化的逻辑系统,后人称之为布尔代数。他提出的逻辑演算在后来的电子电路设计中起基础性作用。

1937年,克劳德·香农在麻省理工大学完成了其电气工程硕士学位论文,用继电器和开关实现了布尔代数和二进制算术运算。论文题为《继电器与开关电路的符号分析》(A Symbolic Analysis of Relay and Switching Circuits),其中香农的理论奠定了数字电路的理论基础。香农凭这篇论文于1940年被授予美国阿尔弗雷德·诺贝尔协会美国工程师奖。哈佛大学的哈沃德·加德纳称,香农的硕士论文“可能是本世纪最重要、最著名的硕士学位论文”。

1937年11月,任职于贝尔实验室的乔治·斯蒂比兹发明了用继电器表示二进制的装置。它是第一台二进制电子计算机。

进制转换十进数转成二进数

整数部分,把十进制转成二进制一直分解至商数为0。读余数从下读到上,即是二进制的整数部分数字。 小数部分,则用其乘2,取其整数部分的结果,再用计算后的小数部分依此重复计算,算到小数部分全为0为止,之后读所有计算后整数部分的数字,从上读到下。
  将59.25(10)转成二进制:

整数部分:

59 ÷ 2 = 29 ... 1

29 ÷ 2 = 14 ... 1

14 ÷ 2 = 7 ... 0

7 ÷ 2 = 3 ... 1

3 ÷ 2 = 1 ... 1

1 ÷ 2 = 0 ... 1

小数部分:

0.25×2=0.5

0.50×2=1.0

59.25(10)=111011.01(2)

也可以公式来计算

59.25(10) = 101*10101+1001*10100+10*1010-1+101*1010-10

= 101*1010+1001+10/1010+101/1010/1010

= 110010+1001+(10+0.1)/1010

= 111011+0.01

= 111011.01

二进数转成十进数

将1001012转换为十进制形式如下:

1001012= [ (1) × 2] + [ (0) × 2] + [ (0) × 2] + [ (1) × 2] + [ (0) × 2 ] + [ (1) × 1 ]

1001012= [1× 32 ] + [0× 16 ] + [0× 8 ] + [1× 4 ] + [0× 2 ] + [1× 1 ]

1001012= 3710

数表[编辑]十进制012345678910二进制十进制1112131415161718192021二进制十进制2223242526272829303132二进制
011011100101110111100010011010
10111100110111101111100001000110010100111010010101
10110101111100011001110101101111100111011111011111100000
二进制化为八进制

把二进制化为八进制也很容易,因为八进制以8为基数,8是2的幂(8=2),因此八进制的一位恰好需要三个二进制位来表示。八进制与二进制数之间的对应就是上面表格中十六进制的前八个数。二进制数000就是八进制数0,二进制数111就是八进制数7,以此类推。

八进制二进制
0000
1001
2010
3011
4100
5101
6110
7111

八进制转为二进制:

658= 110 1012

178= 001 1112

二进制转八进制:

1011002= 101 1002(三位一组) = 548

100112= 010 0112(用零填充 (密码学),三位一组) = 238

八进制转十进制:

658= (6 × 8) + (5 × 8) = (6 × 8) + (5 × 1) = 5310

1278= (1 × 8) + (2 × 8) + (7 × 8) = (1 × 64) + (2 × 8) + (7 × 1) = 8710

应用

二进制的应用非常广泛,可以应用于各个方面,比如计算机科学,物理学等4。

二进制的集合运算

已知集合A,求A的幂集5。

由于集合子集中的元素与子集下标中二进制位的“l”相对应,因此求子集中元素的运算可以转化为寻找子集下标二进制位中“l”所在位置的运算,此运算可以利用移位操作来实现。

例如,求101所对应的A的子集,我们可以通过3次移位,每次先将当前的数值与数值1相与,如果结果等于1,则本次第0位上的值为l,否则为0,由移位的次数可以知道当前第0位的l在原数据中的位置,从而找到对应的实际元素。运算如下:

①第0次与:lOl&001=1,a对应二进制位的第0位,而且本次相与的结果为1,所以a属于此子集:101右移一位,现在的数值为010

②第1次与:010&001=0,b对应二进制位的第l位,而且本次相与的结果为0,所以b不属于此子集。OlO右移一位,现在的数值为001③第1次与:001&001=l,C对应二进制位的第2位,而且本次相与的结果为1,所以C属F此子集。001右移一位,现在的数值为000。

计算完毕。求出101对应的A的子集为{a,c}。