Skip to content

Instantly share code, notes, and snippets.

@arrayadd
Last active May 31, 2017 05:24
Show Gist options
  • Save arrayadd/91b81d5a807960287025682014985d39 to your computer and use it in GitHub Desktop.
Save arrayadd/91b81d5a807960287025682014985d39 to your computer and use it in GitHub Desktop.
为什么是二进制

首先要扯明白的是,二进制比计算机的出现要早几千年,它不是为计算机量身打造的。十进制我们平时生活经常用到,一种有趣的说法是,之所以人们生活中更常用十进制,是以为我们有十个手指头,更容易学习理解其「逢十进一」的规则,使用起来只要掰指头,孩子教育也容易多了。

但是十进制这种掰指头的使用场景,在计算机中却难以行通。据说早期的计算机,也是用十进制,利用齿轮的不同位置表示不同的数值,毕竟这种计算装置更接近人类的思考方式。比如说一个计算设备有十个齿轮,它们连接起来,每一个齿轮有十格,小齿轮转一圈大齿轮走一格,就像钟表。这就是一个简单的十位十进制的数据表示设备了,可以表示0到9999999999的数字。 配合其他的一些机械设备,这样一个简单的基于齿轮的装置就可以实现简单的十进制加减法了。

例如:两套这样的装置A,B,且规定顺时针加法,逆时针转是减。那么当要计算5+3时候,第一步,先在A,B装置上顺时针初始化5和3.   接着用一个传动装置连接它们两个,且传动的规则是,逆时针转动B时候,A顺时针转(加法),这样我们只需要把B装置上的3,一直转到最初状态也就是0. A装置就自动计算出了5+3的值。   为了节省体力,我们可以转动时候用水流来带动且搞一个卡子,当装置回到0位置时候就卡住,水推不动了。当要计算大数字时候(意味着要转很久),我们祖先去狩猎吃饭,等回来时候就可以直接看到结果了。


为什么电子计算机最终没选择十进制

因为不省事。有时候你会觉得真的是懒人在推动世界进步,复杂的东西不利于传播,毕竟不是每个人都有那份耐心去理解你说的东西,要传播自然是一目了然的省事。

例如,用砖头来表示状态,用十进制的话,可以在平地上垒9块转来分别表示0~9。用二进制的话,只需要看平地上有没有转。不需要数有几块。而且还稳定,因为9块砖垒起来容易倒。有两张状态材料容易找+状态稳定,二进制的这些优点对计算机来说非常重要:

以下来自网络:

  1. 电路中容易实现 :当计算机工作的时候,电路通电工作,于是每个输出端就有了电压。电压的高低通过模数转换即转换成了二进制:高电平是由1表示,低电平由0表示。也就是说将模拟电路转换成为数字电路。这里的高电平与低电平可以人为确定,一般地,2.5伏以下即为低电平,3.2伏以上为高电平。二进制数码只有两个(“0”和“1”)。电路只要能识别低、高就可以表示“0”和“1”。
  2. 物理上最易实现存储 :
    (1)基本道理:二进制在物理上最易实现存储,通过磁极的取向、表面的凹凸、光照的有无等来记录。 (2)具体道理:对于只写一次的光盘,将激光束聚住成1--2um的小光束,依靠热的作用融化盘片表面上的碲合金薄膜,在薄膜上形成小洞(凹坑),记录下“1”,原来的位置表示记录“0”。
  3. 便于进行加、减运算和计数编码。易于进行转换,二进制与十进制数易于互相转换。
  4. 便于逻辑判断(是或非)。适合逻辑运算:逻辑代数是逻辑运算的理论依据,二进制只有两个数码,正好与逻辑代数中的“真”和“假”相吻合。二进制的两个数码正好与逻辑命 题中的“真(Ture)”、“假(False)或称为”是(Yes)、“否(No)相对应。
  5. 用二进制表示数据具有抗干扰能力强,可靠性高等优点。因为每位数据只有高低两个状态,当受到一定程度的干扰时,仍能可靠地分辨出它是高还是低。 在计算机中,采用二进制的主要原因是:两个状态的系统容易实现 、运算法则简单、可进行逻辑运算。

二进制的缺点不用说,一个数字书写起来特别冗长,1100101010,难以人机交流。还好大多数情况下是计算机在看,不是我们人,但计算机这门理论还是要靠人来发展,面对这么长的010101数进行思考或操作,没有人会喜欢。因此,C,C++ 甚至没有提供在代码直接写二进制数的方法,而由用八进制(2的3次方),十六(2的四次方)进制来辅助表达,缩短表达,一来和2进制规则接近,二来编程书写起来不至于太长。

另外,编程书写时候,如果不使用特殊的书写形式,16进制数也会和10进制相混。随便一个数:9876,就看不出它是16进制或10进制。 C,C++等编程语言规定,16进制数必须以 0x开头。比如 0x1表示一个16进制数。而1则表示一个十进制。另外如:0xff,0xFF,0X102A,等等。其中的x也不区分大小写。(注意:0x中的0是数字0,而不是字母O)

人们从十进位制的发明中(十个手指头)得到启示:既然每种介质都是具有两个状态的,最自然的进位制当然是二进位制。 二进位制所需要的记数的基本符号只要两个,即0和1。可以用1表示通电,0表示断电;或1表示磁化,0表示未磁化;或1表示凹点,0表示凸点。

总之,二进位制的一个数位正好对应计算机介质的一个信息记录点。用计算机科学的语言,二进位制的一个数位称为一个比特(英语:Bit),亦称二进制位,指二进制中的一位,是信息的最小单位。Bit是Binary digit(二进制数位)的缩写,8个比特称为一个字节(byte)。

据说第一台电子计算机有18000个晶体管。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment