===================
2014-06-08
“万法归一”
改变世界的发明
计算工具的早期发展
计算机来源于人类对于计算工具的不断改进,但很少有人想到它能发展为人工智能,在如此之多的场合发挥作用。最早的计算工具,例如:奇普(Quipu或khipu)是古代印加人的一种结绳记事的方法,用来计数或者记录历史。它是由许多颜色的绳结编成的。
还有古希腊人的安提凯希拉装置,中国的算盘等。中国古代最早采用的一种计算工具叫筹策,又被叫做算筹。这种算筹多用竹子制成,也有用木头,兽骨充当材料的。约二百七十枚一束,放在布袋里可随身携带。直到今天仍在使用的珠算盘,是中国古代计算工具领域中的另一项发明,明代时的珠算盘已经与现代的珠算盘几乎相同。
17世纪初,西方国家的计算工具有了较大的发展,英国数学家纳皮尔发明的"纳皮尔算筹",英国牧师奥却德发明了计圆柱型对数算尺,这种计算尺不仅能做加减乘除、乘方、开方运算,甚至可以计算三角函数,指数函数和对数函数,这些计算工具不仅带动了计算器的发展,也为现代计算器发展奠定了良好的基础,成为现代社会应用广泛的计算工具。
1642年,年仅19岁的法国伟大科学家帕斯卡(Pascaline)发明了第一部机械式计算器,在他的计算器中有一些互相联锁的齿轮,一个转过十位的齿轮会使另一个齿轮转过一位,人们可以像拨电话号码盘那样,把数字拨进去,计算结果就会出现在另一个窗口中,但是只能做加减计算。1694年,莱布尼兹(Leibniz)在德国将其改进成可以进行乘除的计算。1819年,英国科学家巴贝奇设计“差分机”,并于1822年制造出可动模型。 这台机器能提高乘法速度和改进对数表等数字表的精确度。1991年,为纪念巴贝奇诞辰200周年,伦敦科学博物馆制作了完整差分机,它包含4000多个零件,重2.5吨。英国人查尔斯·巴贝奇研制出差分机和分析机为现代计算机设计思想的发展奠定基础。此后,一直要到20世纪50年代末才有电子计算器的出现。
电子计算机的诞生
所谓现代计算机是指采用先进的电子技术来代替陈旧落后的机械或继电器技术。现代计算机经历了半个多世纪的发展,这一时期的杰出代表人物是英国科学家图灵和美籍匈牙利科学家冯·诺依曼。图灵对现代计算机的贡献主要是:建立了图灵机的理论模型,发展了可计算性理论;提出了定义机器智能的图灵测试。冯·诺依曼的贡献主要是:确立了现代计算机的基本结构,即冯·诺依曼结构。其特点可以概括为如下几点:(1)使用单一的处理部件来完成计算、存储以及通信的工作;
(2)存储单元是定长的线性组织;
(3)存储空间的单元是直接寻址的;
(4)使用机器语言,指令通过操作码来完成简单的操作;
(5)对计算进行集中的顺序控制。
1946年2月14日,由美国军方定制的世界上第一台电子计算机“电子数字积分计算机”(ENIAC Electronic Numerical And Calculator)在美国宾夕法尼亚大学问世了。ENIAC(中文名:埃尼阿克)是美国奥伯丁武器试验场为了满足计算弹道需要而研制成的,这台计算器使用了17840支电子管,大小为80英尺×8英尺,重达28t(吨),功耗为170kW,其运算速度为每秒5000次的加法运算,造价约为487000美元。ENIAC的问世具有划时代的意义,表明电子计算机时代的到来。ENIAC的主要设计者是冯·诺伊曼,1945年3月他在共同讨论的基础上起草ENIAC(电子离散变量自动计算机)设计报告初稿,这对后来计算机的设计有决定性的影响,特别是确定计算机的结构,采用存储程序以及二进制编码等,至今仍为电子计算机设计者所遵循。计算机是20世纪最先进的科学技术发明之一,对人类的生产活动和社会活动产生了极其重要的影响,并以强大的生命力飞速发展。它的应用领域从最初的军事科研应用扩展到社会的各个领域,已形成了规模巨大的计算机产业,带动了全球范围的技术进步,由此引发了深刻的社会变革,计算机已遍及一般学校、企事业单位,进入寻常百姓家,成为信息社会中必不可少的工具。
ENIAC方案明确奠定了新机器由五个部分组成,包括:运算器、控制器、存储器、输入和输出设备,并描述了这五部分的职能和相互关系。报告中,诺伊曼对ENIAC中的两大设计思想作了进一步的论证,为计算机的设计树立了一座里程碑。
设计思想之一是二进制,他根据电子元件双稳工作的特点,建议在电子计算机中采用二进制。报告提到了二进制的优点,并预言,二进制的采用将大简化机器的逻辑线路。
设计思想之二是存储程序和程序控制(这也是计算机基本工作原理),把运算程序存在机器的存储器中,程序设计员只需要在存储器中寻找运算指令,机器就会自行计算,这样,就不必每个问题都重新编程,从而大大加快了运算进程。这一思想标志着自动运算的实现,已成为电子计算机设计的基本原则。
1946年7,8月间,冯·诺依曼和戈尔德斯廷、勃克斯在ENIAC方案的基础上,为普林斯顿大学高级研究所研制IAS计算机时,又提出了一个更加完善的设计报告《电子计算机逻辑设计初探》.以上两份既有理论又有具体设计的文件,首次在全世界掀起了一股“计算机热”,它们的综合设计思想,便是著名的“冯·诺依曼机”,其中心就是有存储程序原则--指令和数据一起存储(存储机)。这个概念被誉为“计算机发展史上的一个里程碑”。它标志着电子计算机时代的真正开始,指导着以后的计算机设计。自然一切事物总是在发展着的,随着科学技术的进步,今天人们又认识到“冯·诺依曼机”的不足,它妨碍着计算机速度的进一步提高,而提出了“非冯·诺依曼机”的设想。
从晶体管到集成电路
如果说冯·诺依曼奠定了计算机的体系结构,那么计算机在硬件上的成熟要归功于晶体管的发明和后来集成电路产业的飞速发展。
1947年12月23日,美国新泽西州墨累山的贝尔实验室里,3位科学家——巴丁博士、布菜顿博士和肖克莱博士在紧张而又有条不紊地做着实验。他们在导体电路中正在进行用半导体晶体把声音信号放大的实验。3位科学家惊奇地发现,在他们发明的器件中通过的一部分微量电流,竟然可以控制另一部分流过的大得多的电流,因而产生了放大效应。这个器件,就是在科技史上具有划时代意义的成果——晶体管。因它是在圣诞节前夕发明的,而且对人们未来的生活发生如此巨大的影响,所以被称为“献给世界的圣诞节礼物”。另外这3位科学家因此共同荣获了1956年诺贝尔物理学奖。
晶体管促进并带来了“固态革命”,进而推动了全球范围内的半导体电子工业。作为主要部件,它及时、普遍地首先在通讯工具方面得到应用,并产生了巨大的经济效益。由于晶体管彻底改变了电子线路的结构,集成电路以及大规模集成电路应运而生,这样制造像高速电子计算机之类的高精密装置就变成了现实。
晶体管(transistor)是一种固体半导体器件,具有检波、整流、放大、开关、稳压、信号调制等多种功能。晶体管作为一种可变电流开关,能够基于输入电压控制输出电流。与普通机械开关(如Relay、switch)不同,晶体管利用电讯号来控制自身的开合,而且开关速度可以非常快,实验室中的切换速度可达100GHz以上。严格意义上讲,晶体管泛指一切以半导体材料为基础的单一元件,包括各种半导体材料制成的二极管、三极管、场效应管、可控硅等。晶体管有时多指晶体三极管。
基本逻辑电路
凡是对脉冲通路上的脉冲起着开关作用的电子线路就叫做门电路,是基本的逻辑电路。门电路可以有一个或多个输入端,但只有一个输出端。门电路的各输入端所加的脉冲信号只有满足一定的条件时,“门”才打开,即才有脉冲信号输出。从逻辑学上讲,输入端满足一定的条件是“原因”,有信号输出是“结果”,门电路的作用是实现某种因果关系──逻辑关系。所以门电路是一种逻辑电路。基本的逻辑关系有三种:与逻辑、或逻辑、非逻辑。与此相对应,基本的门电路有与门、或门、非门。
“门”是这样的一种电路:它规定各个输入信号之间满足某种逻辑关系时,才有信号输出,通常有下列三种门电路:与门、或门、非门(反相器)。从逻辑关系看,门电路的输入端或输出端只有两种状态,无信号以“0”表示,有信号以“1”表示。也可以这样规定:低电平为“0”,高电平为“1”,称为正逻辑。反之,如果规定高电平为“0”,低电平为“1”称为负逻辑,然而,高与低是相对的,所以在实际电路中要先说明采用什么逻辑,才有实际意义,例如,负与门对“1”来说,具有“与”的关系,但对“0”来说,却有“或”的关系,即负与门也就是正或门;同理,负或门对“1”来说,具有“或”的关系,但对“0”来说具有“与”的关系,即负或门也就是正与门。
分立元件组成:门电路可用分立元件组成,也可做成集成电路,但目前实际应用的都是集成电路。由于单一品种的与非门可以构成各种复杂的数字逻辑电路,而器件品种单一,给备件、调试都会带来很大方便,所以集成电路工业产品中并没有与门、或门,而供应与非门。
计算机发展大事记
1950年:威廉·肖克莱开发出双极晶体管(Bipolar JunctionTransistor),这是现在通行的标准的晶体管。"晶体管时代开启"。
1953年:第一个采用晶体管的商业化设备投入市场,即助听器。
1954年10月18日:第一台晶体管收音机Regency TR1投入市场,仅包含4只锗晶体管。
1961年4月25日:第一个集成电路专利被授予罗伯特·诺伊斯(Robert Noyce)。最初的晶体管对收音机和电话而言已经足够,但是新的电子设备要求规格更小的晶体管,即集成电路。“集成电路时代开始”
1965年:摩尔定律诞生。当时,戈登·摩尔(Gordon Moore)预测,未来一个芯片上的晶体管数量大约每18个月翻一倍(至今依然基本适用),摩尔定律在Electronics Magazine杂志一篇文章中公布。
1968年7月:罗伯特·诺伊斯和戈登·摩尔从仙童(Fairchild)半导体公司辞职,创立了一个新的企业,即英特尔公司,英文名Intel为“集成电子设备(integrated electronics)”的缩写。
1969年:英特尔成功开发出第一个PMOS硅栅晶体管技术。这些晶体管继续使用传统的二氧化硅栅介质,但是引入了新的多晶硅栅电极。
1971年:英特尔发布了其第一个微处理器4004。4004规格为1/8英寸 x 1/16英寸,包含仅2000多个晶体管,采用英特尔10微米PMOS技术生产。“cpu时代”开始
1972年,英特尔发布了第一个8位处理器8008。
1978年,英特尔发布了第一款16位处理器8086。含有2.9万个晶体管。
1978年:英特尔标志性地把英特尔8088微处理器销售给IBM新的个人电脑事业部,武装了IBM新产品IBM PC的中枢大脑。16位8088处理器为8086的改进版,含有2.9万个晶体管,运行频率为5MHz、8MHz和10MHz。“pc时代”开始。
1982年:286微处理器(全称80286,意为“第二代8086”)推出,提出了指令集概念,即现在的x86指令集,可运行为英特尔前一代产品所编写的所有软件。286处理器使用了13400个晶体管,运行频率为6MHz、8MHz、10MHz和12.5MHz。
1985年:英特尔386微处理器问世,含有27.5万个晶体管,是最初4004晶体管数量的100多倍。386是32位芯片,具备多任务处理能力,即它可在同一时间运行多个程序。
1993年:英特尔·奔腾·处理器问世,含有3百万个晶体管,采用英特尔0.8微米制程技术生产。“奔腾时代”开始。
1999年2月:英特尔发布了奔腾·III处理器。奔腾III是1x1正方形硅,含有950万个晶体管,采用英特尔0.25微米制程技术生产。
2002年1月:英特尔奔腾4处理器推出,高性能桌面台式电脑由此可实现每秒钟22亿个周期运算。它采用英特尔0.13微米制程技术生产,含有5500万个晶体管。
2002年8月13日:英特尔透露了90纳米制程技术的若干技术突破,包括高性能、低功耗晶体管,应变硅,高速铜质接头和新型低-k介质材料。这是业内首次在生产中采用应变硅。
2003年3月12日:针对笔记本的英特尔·迅驰·移动技术平台诞生,包括了英特尔最新的移动处理器“英特尔奔腾M处理器”。该处理器基于全新的移动优化微体系架构,采用英特尔0.13微米制程技术生产,包含7700万个晶体管。
2005年5月26日:英特尔第一个主流双核处理器“英特尔奔腾D处理器”诞生,含有2.3亿个晶体管,采用英特尔领先的90纳米制程技术生产。
……
二进制
冯·诺依曼建议ENIAC使用二进制,这大大便利了计算机的世界。
优点:
(1)技术实现简单,计算机是由逻辑电路组成,逻辑电路通常只有两个状态,开关的接通与断开,这两种状态正好可以用“1”和“0”表示。
(2)简化运算规则:两个二进制数和、积运算组合各有三种,运算规则简单,有利于简化计算机内部结构,提高运算速度。
(3)适合逻辑运算:逻辑代数是逻辑运算的理论依据,二进制只有两个数码,正好与逻辑代数中的“真”和“假”相吻合。
(4)易于进行转换,二进制与十进制数易于互相转换。
(5)用二进制表示数据具有抗干扰能力强,可靠性高等优点。因为每位数据只有高低两个状态,当受到一定程度的干扰时,仍能可靠地分辨出它是高还是低。
比如,你可以用下面任何一种方式表示数字667
1 0 1 0 0 1 1 0 1 1 | − | − − | | − | | x o x o o x x o x x y n y n n y y n y y
在德国图灵根著名的郭塔王宫图书馆(Schlossbiliothke zu Gotha)保存着一份弥足珍贵的手稿,其标题为:“1与0,一切数字的神奇渊源。这是造物的秘密美妙的典范,因为,一切无非都来自上帝。”这是德国天才大师莱布尼茨(Gottfried Wilhelm Leibniz,1646 - 1716)的手迹。但是,关于这个神奇美妙的数字系统,莱布尼茨只有几页异常精炼的描述。
莱布尼茨不仅发明了二进制,而且赋予了它宗教的内涵。他在写给当时在中国传教的法国耶稣士会牧师布维(Joachim Bouvet,1662 - 1732)的信中说:“第一天的伊始是1,也就是上帝。第二天的伊始是2,……到了第七天,一切都有了。所以,这最后的一天也是最完美的。因为,此时世间的一切都已经被创造出来了。因此它被写作‘7’,也就是‘111’(二进制中的111等于十进制的7),而且不包含0。只有当我们仅仅用0和1来表达这个数字时,才能理解,为什么第七天才最完美,为什么7是神圣的数字。特别值得注意的是它(第七天)的特征(写作二进制的111)与三位一体的关联。”
布维是一位汉学大师,他对中国的介绍是17、18世纪欧洲学界中国热最重要的原因之一。布维是莱布尼茨的好朋友,一直与他保持着频繁的书信往来。莱布尼茨曾将很多布维的文章翻译成德文,发表刊行。恰恰是布维向莱布尼茨介绍了《周易》和八卦的系统,并说明了《周易》在中国文化中的权威地位。
八卦是由八个符号组构成的占卜系统,而这些符号分为连续的与间断的横线两种。这两个后来被称为“阴”、“阳”的符号,在莱布尼茨眼中,就是他的二进制的中国翻版,但实际莱布尼茨是受中国阴阳太极影响,只不过他付出了诸多研究,推演出二进制。他感到这个来自古老中国文化的符号系统与他的二进制之间的关系实在太明显了,因此断言:二进制乃是具有世界普遍性的、最完美的逻辑语言。
我们可以肯定地说,这种解释与《易经》没有联系。《易经》不是数学书,而是一本“预言”,并在漫长的历史中逐渐演变为一本“智慧之书”。书里的短线意味着阴阳相对,也即天与地、光明与黑暗、造物主和大自然。六爻以不同的组合出现,人们可以借此对自然界和人类生活的变换做出各种不同的解释。比利时神父 P.Couplet(中文名字柏应理)的 Confucius.Sinarum Philosophus (《孔子,中国人的思想家,…》)第一次在欧洲发表了易经的六十四幅六爻八卦图。
这一次将数学与古代中国《易经》相联的尝试是不符合实际的。莱布尼茨的二进制数学指向的不是古代中国,而是未来。莱布尼茨在1679年3月15日记录下他的二进制体系的同时,还设计了一台可以完成数码计算的机器。我们今天的现代科技将此设想变为现实,这在莱布尼茨的时代是超乎人的想象能力的。
二进制数据的表示法
二进制数据也是采用位置计数法,其位权是以2为底的幂。例如二进制数据110.11,逢2进1,其权的大小顺序为2²、2¹、2º、2的-1次方 、2的-2次方 。对于有n位整数,m位小数的二进制数据用加权系数展开式表示,可写二进制和十六进制,八进制一样,都以二的幂来进位的。
在现实生活和记数器中,如果表示数的“器件”只有两种状态,如电灯的“亮”与“灭”,开关的“开”与“关”。一种状态表示数码0,另一种状态表示数码1,1加1应该等于2,因为没有数码2,只能向上一个数位进一,就是采用“满二进一”的原则,这和十进制是采用“满十进一”原则完全相同。
1+1=10,10+1=11,11+1=100,100+1=101,
101+1=110,110+1=111,111+1=1000,……,
可见二进制的10表示二,100表示四,1000表示八,10000表示十六,……。
二进制同样是“位值制”。同一个数码1,在不同数位上表示的数值是不同的。如11111,从右往左数,第一位的1就是一,第二位的1表示二,第三位的1表示四,第四位的1表示八,第五位的1表示十六。
十进制1至128的二进制表示:
0=0
1=1
2=10(2的1次方)
3=11
4=100(2的2次方)
5=101
6=110
7=111
8=1000(2的3次方)
9=1001
10=1010
11=1011
12=1100
13=1101
14=1110
15=1111
16=10000(2的4次方)
17=10001
18=10010
19=10011
20=10100
21=10101
22=10110
23=10111
24=11000
25=11001
26=11010
27=11011
28=11100
29=11101
30=11110
31=11111
32=100000(2的5次方)
33=100001
34=100010
35=100011
36=100100
37=100101
38=100110
39=100111
40=101000
41=101001
42=101010
43=101011
44=101100
45=101101
46=101110
47=101111
48=110000
49=110001
50=110010
51=110011
52=110100
53=110101
54=110110
55=110111
56=111000
57=111001
58=111010
59=111011
60=111100
61=111101
62=111110
63=111111
64=1000000 (2的6次方)
65=1000001
66=1000010
67=1000011
68=1000100
69=1000101
70=1000110
71=1000111
72=1001000
73=1001001
74=1001010
75=1001011
76=1001100
77=1001101
78=1001110
79=1001111
80=1010000
81=1010001
82=1010010
83=1010011
84=1010100
85=1010101
86=1010110
87=1010111
88=1011000
89=1011001
90=1011010
91=1011011
92=1011100
93=1011101
94=1011110
95=1011111
96=1100000
97=1100001
98=1100010
99=1100011
100=1100100
101=1100101
102=1100110
103=1100111
104=1101000
105=1101001
106=1101010
107=1101011
108=1101100
109=1101101
110=1101110
111=1101111
112=1110000
113=1110001
114=1110010
115=1110011
116=1110100
117=1110101
118=1110110
119=1110111
120=1111000
121=1111001
122=1111010
123=1111011
124=1111100
125=1111101
126=1111110
127=1111111
128=10000000 (2的7次方)
……
256=100000000(2的8次方)
……
512=1000000000(2的9次方)
……
1024=10000000000(2的10次方)
从中也可以看出,二进制的一个缺点就是太长(以位数换简单),中国人口13亿,用二进制表示就是1001101011111000110110100000000。那么,如何表示分数和小数呢?
在十进制中,分数可以统一用小数(有限和无限,循环和不循环小数)来表示。0.1就是10的-1次方,0.01就是10的-2次方。对于二进制,一样可以,只不过精度单位分别是2的-1次方(1/2),2的-2次方(1/4),2的-3次方(1/8),……所以二进制的精度单位(在十进制看来)太“稀疏”,很多十进制小数是不能用有限的二进制小数来表示的。
1/3 = 0 × 2−1 + 1 × 2−2 + 0 × 2−3 + 1 × 2−4 + ... = 0.3125 + ...
分数 | 十进制 | 二进制 | 分数合成 |
---|---|---|---|
1/1 | 1 | 1 | |
1/2 | 0.5 | 0.1 | 1/2 |
1/3 | 0.333... | 0.010101... | 1/4 + 1/16 + 1/64 . . . |
1/4 | 0.25 | 0.01 | 1/4 |
1/5 | 0.2 | 0.00110011... | 1/8 + 1/16 + 1/128 . . . |
1/6 | 0.1666... | 0.0010101... | 1/8 + 1/32 + 1/128 . . . |
1/7 | 0.142857142857... | 0.001001... | 1/8 + 1/64 + 1/512 . . . |
1/8 | 0.125 | 0.001 | 1/8 |
1/9 | 0.111... | 0.000111000111... | 1/16 + 1/32 + 1/64 . . . |
1/10 | 0.1 | 0.000110011... | 1/16 + 1/32 + 1/256 . . . |
1/11 | 0.090909... | 0.00010111010001011101... | 1/16 + 1/64 + 1/128 . . . |
1/12 | 0.08333... | 0.00010101... | 1/16 + 1/64 + 1/256 . . . |
1/13 | 0.076923076923... | 0.000100111011000100111011... | 1/16 + 1/128 + 1/256 . . . |
1/14 | 0.0714285714285... | 0.0001001001... | 1/16 + 1/128 + 1/1024 . . . |
1/15 | 0.0666... | 0.00010001... | 1/16 + 1/256 . . . |
1/16 | 0.0625 or 0.0624999... | 0.0001 | 1/16 |
二进制的运算
二进制的运算和十进制十分相似,最常用的是加法运算和乘法运算。
加法
十六进制
环境 | 格式 | 备注 |
---|---|---|
URL | %hex | |
XML,XHTML | &#xhex | |
HTML,CSS | #hex | 6位,用于表示颜色 |
Unicode | U+hex | 6位,表示字符编码 |
MIME | =hex | |
Modula-2 | #hex | |
Smalltalk,ALGOL 68 | 16rhex | |
Common Lisp | #xhex或#16rhex | |
IPv6 | 8个hex用:分隔 |
环境 | 格式 | 备注 |
---|---|---|
URL | %hex | 表示网址 |
XML,XHTML | &#xhex | |
HTML,CSS | #hex | 6位,用于表示颜色 |
Unicode | U+hex | 6位,表示字符编码 |
MIME | =hex | |
Modula-2 | #hex | |
Smalltalk,ALGOL 68 | 16rhex | |
Common Lisp | #xhex或#16rhex | |
IPv6 | 8个hex用:分隔 | 表示ip地址 |
1-64 的进制对照表
10进制 | 2进制 | 16进制 |
1 | 1 | 1 |
2 | 10 | 2 |
3 | 11 | 3 |
4 | 100 | 4 |
5 | 101 | 5 |
6 | 110 | 6 |
7 | 111 | 7 |
8 | 1000 | 8 |
9 | 1001 | 9 |
10 | 1010 | A |
11 | 1011 | B |
12 | 1100 | C |
13 | 1101 | D |
14 | 1110 | E |
15 | 1111 | F |
16 | 10000 | 10 |
17 | 10001 | 11 |
18 | 10010 | 12 |
19 | 10011 | 13 |
20 | 10100 | 14 |
21 | 10101 | 15 |
22 | 10110 | 16 |
23 | 10111 | 17 |
24 | 11000 | 18 |
25 | 11001 | 19 |
26 | 11010 | 1A |
27 | 11011 | 1B |
28 | 11100 | 1C |
29 | 11101 | 1D |
30 | 11110 | 1E |
31 | 11111 | 1F |
32 | 100000 | 20 |
33 | 100001 | 21 |
34 | 100010 | 22 |
35 | 100011 | 23 |
36 | 100100 | 24 |
37 | 100101 | 25 |
38 | 100110 | 26 |
39 | 100111 | 27 |
40 | 101000 | 28 |
41 | 101001 | 29 |
42 | 101010 | 2A |
43 | 101011 | 2B |
44 | 101100 | 2C |
45 | 101101 | 2D |
46 | 101110 | 2E |
47 | 101111 | 2F |
48 | 110000 | 30 |
49 | 110001 | 31 |
50 | 110010 | 32 |
51 | 110011 | 33 |
52 | 110100 | 34 |
53 | 110101 | 35 |
54 | 110110 | 36 |
55 | 110111 | 37 |
56 | 111000 | 38 |
57 | 111001 | 39 |
58 | 111010 | 3A |
59 | 111011 | 3B |
60 | 111100 | 3C |
61 | 111101 | 3D |
62 | 111110 | 3E |
63 | 111111 | 3F |
64 | 1000000 | 40 |
转换
原码、反码和补码
在学习原码, 反码和补码之前, 需要先了解机器数和真值的概念.
1、机器数
一个数在计算机中的二进制表示形式, 叫做这个数的机器数。机器数是带符号的,在计算机用一个数的最高位存放符号, 正数为0, 负数为1.
比如,十进制中的数 +3 ,计算机字长为8位,转换成二进制就是00000011。如果是 -3 ,就是 10000011 。
那么,这里的 00000011 和 10000011 就是机器数。
2、真值
因为第一位是符号位,所以机器数的形式值就不等于真正的数值。例如上面的有符号数 10000011,其最高位1代表负,其真正数值是 -3 而不是形式值131(10000011转换成十进制等于131)。所以,为区别起见,将带符号位的机器数对应的真正数值称为机器数的真值。
例:0000 0001的真值 = +000 0001 = +1,1000 0001的真值 = –000 0001 = –1
二、 原码, 反码, 补码的基础概念和计算方法.
在探求为何机器要使用补码之前, 让我们先了解原码, 反码和补码的概念.对于一个数, 计算机要使用一定的编码方式进行存储. 原码, 反码, 补码是机器存储一个具体数字的编码方式.
1. 原码
原码就是符号位加上真值的绝对值, 即用第一位表示符号, 其余位表示值. 比如如果是8位二进制:
[+1]原 = 0000 0001
[-1]原 = 1000 0001
第一位是符号位. 因为第一位是符号位, 所以8位二进制数的取值范围就是:
[1111 1111 , 0111 1111]
即
[-127 , 127]
原码是人脑最容易理解和计算的表示方式.
2. 反码
反码的表示方法是:
正数的反码是其本身
负数的反码是在其原码的基础上, 符号位不变,其余各个位取反.
[+1] = [00000001]原 = [00000001]反
[-1] = [10000001]原 = [11111110]反
可见如果一个反码表示的是负数, 人脑无法直观的看出来它的数值. 通常要将其转换成原码再计算.
3. 补码
补码的表示方法是:
正数的补码就是其本身
负数的补码是在其原码的基础上, 符号位不变, 其余各位取反, 最后+1. (即在反码的基础上+1)
[+1] = [00000001]原 = [00000001]反 = [00000001]补
[-1] = [10000001]原 = [11111110]反 = [11111111]补
对于负数, 补码表示方式也是人脑无法直观看出其数值的. 通常也需要转换成原码在计算其数值.
三. 为何要使用原码, 反码和补码
在开始深入学习前, 我的学习建议是先"死记硬背"上面的原码, 反码和补码的表示方式以及计算方法.
现在我们知道了计算机可以有三种编码方式表示一个数. 对于正数因为三种编码方式的结果都相同:
[+1] = [00000001]原 = [00000001]反 = [00000001]补
所以不需要过多解释. 但是对于负数:
[-1] = [10000001]原 = [11111110]反 = [11111111]补
可见原码, 反码和补码是完全不同的. 既然原码才是被人脑直接识别并用于计算表示方式, 为何还会有反码和补码呢?
首先, 因为人脑可以知道第一位是符号位, 在计算的时候我们会根据符号位, 选择对真值区域的加减. (真值的概念在本文最开头). 但是对于计算机, 加减乘数已经是最基础的运算, 要设计的尽量简单. 计算机辨别"符号位"显然会让计算机的基础电路设计变得十分复杂! 于是人们想出了将符号位也参与运算的方法. 我们知道, 根据运算法则减去一个正数等于加上一个负数, 即: 1-1 = 1 + (-1) = 0 , 所以机器可以只有加法而没有减法, 这样计算机运算的设计就更简单了.
于是人们开始探索 将符号位参与运算, 并且只保留加法的方法. 首先来看原码:
计算十进制的表达式: 1-1=0
1 - 1 = 1 + (-1) = [00000001]原 + [10000001]原 = [10000010]原 = -2
如果用原码表示, 让符号位也参与计算, 显然对于减法来说, 结果是不正确的.这也就是为何计算机内部不使用原码表示一个数.
为了解决原码做减法的问题, 出现了反码:
计算十进制的表达式: 1-1=0
1 - 1 = 1 + (-1) = [0000 0001]原 + [1000 0001]原= [0000 0001]反 + [1111 1110]反 = [1111 1111]反 = [1000 0000]原 = -0
发现用反码计算减法, 结果的真值部分是正确的. 而唯一的问题其实就出现在"0"这个特殊的数值上. 虽然人们理解上+0和-0是一样的, 但是0带符号是没有任何意义的. 而且会有[0000 0000]原和[1000 0000]原两个编码表示0.
于是补码的出现, 解决了0的符号以及两个编码的问题:
1-1 = 1 + (-1) = [0000 0001]原 + [1000 0001]原 = [0000 0001]补 + [1111 1111]补 = [0000 0000]补=[0000 0000]原
这样0用[0000 0000]表示, 而以前出现问题的-0则不存在了.而且可以用[1000 0000]表示-128:
(-1) + (-127) = [1000 0001]原 + [1111 1111]原 = [1111 1111]补 + [1000 0001]补 = [1000 0000]补
-1-127的结果应该是-128, 在用补码运算的结果中, [1000 0000]补 就是-128. 但是注意因为实际上是使用以前的-0的补码来表示-128, 所以-128并没有原码和反码表示.(对-128的补码表示[1000 0000]补算出来的原码是[0000 0000]原, 这是不正确的)
使用补码, 不仅仅修复了0的符号以及存在两个编码的问题, 而且还能够多表示一个最低数. 这就是为什么8位二进制, 使用原码或反码表示的范围为[-127, +127], 而使用补码表示的范围为[-128, 127].
因为机器使用补码, 所以对于编程中常用到的32位int类型, 可以表示范围是: [-231, 231-1] 因为第一位表示的是符号位.而使用补码表示时又可以多保存一个最小值.
浮点数
![s \times b^e](http://upload.wikimedia.org/math/6/a/0/6a06106cda85af68c47c98f1bceeb366.png)
To calculate π the formula is
where n is the normalized significand's n-th
设有两个浮点数x和y,它们分别为
x = Mx*2^Ex
y = My*2^Ey
其中Ex和Ey分别为数x和y的阶码,Mx和My为数x和y的尾数。
两浮点数进行加法和减法的运算规则是
设 Ex小于等于Ey,则 x±y = (Mx*2^(Ex-Ey)±My)*2^Ey,
完成浮点加减运算的操作过程大体分为四步:
1. 0 操作数的检查;
2. 比较阶码大小并完成对阶;
3. 尾数进行加或减运算;
4. 结果规格化并进行舍入处理。
⑴ 0 操作数检查
浮点加减运算过程比定点运算过程复杂。如果判知两个操作数x或y中有一个数为0,即可得知运算结果而没有必要再进行后续的一系列操作以节省运算时间。0操作数检查步骤则用来完成这一功能。
⑵ 比较阶码大小并完成对阶
两浮点数进行加减,首先要看两数的阶码是否相同,即小数点位置是否对齐。若二数阶码相同,表示小数点是对齐的,就可以进行尾数的加减运算。反之,若二数阶码不同,表示小数点位置没有对齐,此时必须使二数阶码相同,这个过程叫作对阶。
要对阶,首先应求出两数阶码Ex和Ey之差,即
△E = Ex-Ey
若△E=0,表示两数阶码相等,即Ex=Ey;若△E>0,表示Ex>Ey;若△E<0,表示Ex<Ey。
当Ex≠Ey 时,要通过尾数的移动以改变Ex或Ey,使之相等。原则上,既可以通过Mx移位以改变Ex来达到Ex=Ey,也可以通过My移位以改变Ey来实现Ex=Ey。但是,由于浮点表示的数多是规格化的,尾数左移会引起最高有效位的丢失,造成很大误差。尾数右移虽引起最低有效位的丢失,但造成误差较小。因此,对阶操作规定使尾数右移,尾数右移后阶码作相应增加,其数值保持不变。显然,一个增加后的阶码与另一个阶码相等,增加的阶码的一定是小阶。因此在对阶时,总是使小阶向大阶看齐,即小阶的尾数向右移位(相当于小数点左移)每右移一位,其阶码加1,直到两数的阶码相等为止,右移的位数等于阶差△E。
例如123456.7+101.7654:
e=5; s=1.234567 (123456.7) + e=2; s=1.017654 (101.7654)
e=5; s=1.234567 + e=5; s=0.001017654 (after shifting) -------------------- e=5; s=1.235584654 (true sum: 123558.4654)
⑶ 尾数求和运算
⑷ 结果规格化
在浮点加减运算时,尾数求和的结果也可以得到01.ф…ф或10.ф…ф,即两符号位不等,这在定点加减法运算中称为溢出,是不允许的。但在浮点运算中,它表明尾数求和结果的绝对值大于1,向左破坏了规格化。此时将运算结果右移以实现规格化表示,称为向右规格化。规则是:尾数右移1位,阶码加1。当尾数不是1.M时需向左规格化。
⑸ 舍入处理
在对阶或向右规格化时,尾数要向右移位,这样,被右移的尾数的低位部分会被丢掉,从而造成一定误差,因此要进行舍入处理。
简单的舍入方法有两种:一种是"0舍1入"法,即如果右移时被丢掉数位的最高位为0则舍去,为1则将尾数的末位加"1"。另一种是"恒置一"法,即只要数位被移掉,就在尾数的末尾恒置"1"。
在IEEE754标准中,舍入处理提供了四种可选方法:
就近舍入其实质就是通常所说的"四舍五入"。例如,尾数超出规定的23位的多余位数字是10010,多余位的值超过规定的最低有效位值的一半,故最低有效位应增1。若多余的5位 是01111,则简单的截尾即可。对多余的5位10000这种特殊情况:若最低有效位现为0,则截 尾;若最低有效位现为1,则向上进一位使其变为 0。
朝0舍入 即朝数轴原点方向舍入,就是简单的截尾。无论尾数是正数还是负数,截尾都使取值的绝对值比原值的绝对值小。这种方法容易导致误差积累。
朝+∞舍入 对正数来说,只要多余位不全为0则向最低有效位进1;对负数来说则是简单的截尾。
朝-∞舍入 处理方法正好与 朝+∞舍入情况相反。对正数来说,只要多余位不全为0则简单截尾;对负数来说,向最低有效位进1。
⑹ 溢出处理
浮点数的溢出是以其阶码溢出表现出来的。在加\减运算过程中要检查是否产生了溢出:若阶码正常,加(减)运算正常结束;若阶码溢出,则要进行相应处理。另外对尾数的溢出也需要处理。
阶码上溢 超过了阶码可能表示的最大值的正指数值,一般将其认为是+∞和-∞。
阶码下溢 超过了阶码可能表示的最小值的负指数值,一般将其认为是0。
尾数上溢 两个同符号尾数相加产生了最高位向上的进位,将尾数右移,阶码增1来重新对齐。
尾数下溢 在将尾数右移时,尾数的最低有效位从尾数域右端流出,要进行舍入处理。
浮点数的乘除运算
e=3; s=4.734612 × e=5; s=5.417242 ----------------------- e=8; s=25.648538980104 (true product) e=8; s=25.64854 (after rounding) e=9; s=2.564854 (after normalization)
布尔代数和逻辑电路
布尔代数的由来
逻辑电路
1938年香农在MIT获得电气工程硕士学位,硕士论文题目是《A Symbolic Analysis of Relay and Switching Circuits》(继电器与开关电路的符号分析)。当时他已经注意到电话交换电路与 布尔代数 之间的类似性,即把布尔代数的“真”与“假”和电路系统的“开”与“关”对应起来,并用1和0表示。于是他用布尔代数分析并优化开关电路,这就奠定了数字电路的理论基础。 哈佛大学 的Howard Gardner教授说,“这可能是本世纪最重要、最著名的一篇硕士论文。”
逻辑电路(logic gates)是一种以二进制为原理、实现数字信号逻辑运算和操作的电路。分组合逻辑电路和时序逻辑电路。前者由最基本的“与门”电路、“或门电路”和“非门”电路组成,其输出值仅依赖于其输入变量的当前值,与输入变量的过去值无关—即不具记忆和存储功能;后者也由上述基本逻辑门电路组成,但存在反馈回路—它的输出值不仅依赖于输入变量的当前值,也依赖于输入变量的过去值。由于只分高、低电平,抗干扰力强,精度和保密性佳。广泛应用于计算机、数字控制、通信、自动化和仪表等方面。最基本的有与电路、或电路和非电路。
主要包括内容有数字电子技术(几种逻辑电路)、门电路基础(半导体特性,分立元件、TTL集成电路CMOS集成门电路)、组合逻辑电路(加法器、编码器、译码器等集成逻辑功能)时序逻辑电路(计数器、寄存器)以及数模和模数转换。简单的逻辑电路通常是由门电路构成,也可以用三极管来制作,例如,一个NPN三极管的集电极和另一个NPN三极管的发射极连接,这就可以看作是一个简单的与门电路,即:当两个三极管的基极都接高电平的时候,电路导通,而只要有一个不接高电平,电路就不导通……
A
|
B
|
0
|
1
|
1
|
0
|
A
|
B
|
C
|
0
|
0
|
0
|
0
|
1
|
0
|
1
|
0
|
0
|
1
|
1
|
1
|
A
|
B
|
C
|
0
|
0
|
0
|
0
|
1
|
1
|
1
|
0
|
1
|
1
|
1
|
1
|
A
|
B
|
C
|
0
|
0
|
1
|
0
|
1
|
1
|
1
|
0
|
1
|
1
|
1
|
0
|
A
|
B
|
C
|
0
|
0
|
1
|
0
|
1
|
0
|
1
|
0
|
0
|
1
|
1
|
0
|
A
|
B
|
C
|
0
|
0
|
0
|
0
|
1
|
1
|
1
|
0
|
1
|
1
|
1
|
0
|
A
|
B
|
C
|
0
|
0
|
1
|
0
|
1
|
0
|
1
|
0
|
0
|
1
|
1
|
1
|
模拟电路和数字电路
模拟电路
2、当图像信息和声音信息改变时,信号的波也改变,即模拟信号待传播的信息包含在它的波形之中(信息变化规律直接反映在模拟信号的幅度、频率和相位的变化上)。
3.初级模拟电路主要解决两个大的方面:1放大、2信号源。
4、模拟信号具有连续性。
一.半导体器件
包括半导体特性,半导体二极管,双极结性三极管,场效应三极管等
导电性介于良导电体与绝缘体之间,利用半导体材料特殊电特性来完成特定功能的电子器件。
二.放大电路的基本原理和分析方法:1.原理:单管共发射极放大电路;双极性三极管的三组态---共射 共基 共集;场效应管放大电路--共源极放大。分压自偏压式共 源极放大,共漏极放大,多级放大,2方法 直流通路与交流通路;静态工作点的分析;微变等效电路法;图解法等等。
三.放大电路的频率响应
单管共射放大电路的频响--下限频率,上限频率和通频带频率失真波特图多级放大电路的频响
四.功率放大
互补对称功率放大电路—— OTL(省去输出变压器),OCL(实用电路)
五.集成放大电路
放大电路(amplification circuit)能够将一个微弱的交流小信号(叠加在直流工作点上),通过一个装置(核心为三极管、场效应管),得到一个波形相似(不失真),但幅值却大很多的交流大信号的输出。实际的放大电路通常是由信号源、晶体三极管构成的放大器及负载组成。
偏置电路,差分放大电路,中间级,输出级。
六.放大电路的反馈
正反馈和负反馈
负反馈:四组态——电压串联,电压并联,电流串联,电流并联负反馈。(注意输出电阻和输入电阻的改变)
负反馈的分析:Af=1/F(深度负反馈时)
七.模拟信号运算电路
理想运放的特点(虚短虚地);
比例运放(反向比例运放,同向比例运放,差分比例运放);
求和电路(反向输入求和,同向输入求和)
积分电路,微分电路;
对数电路,指数电路;
乘法电路,除法电路。
八.信号处理电路
有源滤波器( 低通LPF,高通HPF。带通BPF,带阻BEF)
电压比较器(过零比较器,单限比较器,滞回比较器,双限比较器)
九.波形发生电路
正弦波振荡电路(条件,组成,分析步骤)
RC正弦波振荡电路(RC串并联网络选频特性)
LC 正弦波振荡电路 (LC并联网络选频特性电感三点式电容三点式)
石英晶体振荡器
非正弦波振荡器(矩形波,三角波,锯齿形发生器)
单相整流电路
滤波电路(电容滤波,电感滤波 ,复式滤波)
倍压整流电路(二倍压整流电路,多倍压整压电路)
串联型直流稳压电路
(1)放大电路:用于信号的电压、电流或功率放大。
(2)滤波电路:用于信号的提取、变换或抗干扰。
(3)运算电路:完成信号的比例、加、减、乘、除、积分、微分、对数、指数等运算。
(4)信号转换电路:用于将电流信号转换成电压信号或将电压信号转换为电流信号、将直流信号转换为交流信号或将交流信号转换为直流信号、将直流电压转换成与之成正比的频率……
(5)信号发生电路:用于产生正弦波、矩形波、三角波、锯齿波。
(6)直流电源:将220V、50Hz交流电转换成不同输出电压和电流的直流电,作为各种电子线路的供电电源。
分类
模拟电路可分为标准模拟电路和专用模拟电路(application spacific analog IC)两大类,前者占市场的37%,后者占63%,据ICInsight公司报道,2000年两者合计达310亿美元,比上年大幅增长40%,预计今年将续增23%,达380亿美元。又据WSTS(世界半导体贸易统计协会2012年秋季最新预测,世界模拟电路市场2000年为306.3亿美元,2013年增长20%,达368.8亿美元,1999~2003年间的年均增长率为19.5%。标准模拟电路包括放大器接口电路、数据转换器、比较器、稳压器和基准电路等。2000年共计114亿美元,其中稳压器和基准电路比例最大,占整个模拟电路市场的13%,随后为放大器,占10%,接口电路8%,数据转换器6%,比较器1%。专用模拟电路市场是指在消费类电子产品、计算机、通信、汽车和工业其他部门应用的电路。2000年共计192亿美元在整个模拟电路市场上,通信用专用模拟电路占22%,消费类占16%,汽车用占9%,计算机占8%,工业和其他应用占7%。
数字电路
数字电路的研究方法是逻辑分析和逻辑设计,所需要的工具是逻辑代数。 (在正逻辑下,“0”是低电平,“1”是高电平,高低电平没有明确的界限)。数字电路主要研究对象是电路的输出与输入之间的逻辑关系,因而在数字电路中不能采用模拟电路的分析方法,例如,小信号模型分析法。由于数字电路中的器件主要工作在开关状态,因而采用的分析工具主要是逻辑代数,用功能表、真值表、逻辑表达式、波形图等来表达电路的主要功能。随着计算技术的发展,为了分析、仿真与设计数字电路或数字系统,还可以采用硬件描述语言,使用如ABEL语言等软件,借助计算机来分析、仿真与设计数字系统。
数字电路的发展与模拟电路一样经历了由电子管、半导体分立器件到集成电路等几个时代。但其发展比模拟电路发展的更快。从60年代开始,数字集成器件以双极型工艺制成了小规模逻辑器件。随后发展到中规模逻辑器件;70年代末,微处理器的出现,使数字集成电路的性能产生质的飞跃。
数字集成器件所用的材料以硅材料为主,在高速电路中,也使用化合物半导体材料,例如砷化镓等。
逻辑门是数字电路中一种重要的逻辑单元电路 。TTL逻辑门电路问世较早,其工艺经过不断改进,至今仍为主要的基本逻辑器件之一。随着CMOS工艺的发展,TTL的主导地位受到了动摇,有被CMOS器件所取代的趋势。
近几年来,可编程逻辑器件PLD特别是现场可编程门阵列FPGA的飞速进步,使数字电子技术开创了新局面,不仅规模大,而且将硬件与软件相结合,使器件的功能更加完善,使用更灵活。
数字电路或数字集成电路是由许多的逻辑门组成的复杂电路。与模拟电路相比,它主要进行数字信号的处理(即信号以0与1两个状态表示),因此抗干扰能力较强。数字集成电路有各种门电路、触发器以及由它们构成的各种组合逻辑电路和时序逻辑电路。一个数字系统一般由控制部件和运算部件组成,在时脉的驱动下,控制部件控制运算部件完成所要执行的动作。通过模拟数字转换器、数字模拟转换器,数字电路可以和模拟电路互相连接。
简称组合电路,它由最基本的逻辑门电路组合而成。特点是:输出值只与当时的输入值有关,即输出惟一地由当时的输入值决定。电路没有记忆功能,输出状态随着输入状态的变化而变化,类似于电阻性电路,如加法器、译码器、编码器、数据选择器等都属于此类。
时序逻辑电路
简称时序电路,它是由最基本的逻辑门电路加上反馈逻辑回路(输出到输入)或器件组合而成的电路,与组合电路最本质的区别在于时序电路具有记忆功能。时序电路的特点是:输出不仅取决于当时的输入值,而且还与电路过去的状态有关。它类似于含储能元件的电感或电容的电路,如触发器、锁存器、计数器、移位寄存器、储存器等电路都是时序电路的典型器件。
按电路有无集成元器件来分,可分为分立元件数字电路和集成数字电路。
按集成电路的集成度进行分类,可分为小规模集成数字电路(SSI)、中规模集成数字电路(MSI)、大规模集成数字电路(LSI)和超大规模集成数字电路(VLSI)。
按构成电路的半导体器件来分类,可分为双极型数字电路和单极型数字电路。
1、 同时具有算术运算和逻辑运算功能
数字电路是以二进制逻辑代数为数学基础,使用二进制数字信号,既能进行算术运算又能方便地进行逻辑运算(与、或、非、判断、比较、处理等),因此极其适合于运算、比较、存储、传输、控制、决策等应用。
2、 实现简单,系统可靠
以二进制作为基础的数字逻辑电路,可靠性较强。电源电压的小的波动对其没有影响,温度和工艺偏差对其工作的可靠性影响也比模拟电路小得多。
3、 集成度高,功能实现容易
集成度高,体积小,功耗低是数字电路突出的优点之一。电路的设计、维修、维护灵活方便,随着集成电路技术的高速发展,数字逻辑电路的集成度越来越高,集成电路块的功能随着小规模集成电路(SSI)、中规模集成电路(MSI)、大规模集成电路(LSI)、超大规模集成电路(VLSI)的发展也从元件级、器件级、部件级、板卡级上升到系统级。电路的设计组成只需采用一些标准的集成电路块单元连接而成。对于非标准的特殊电路还可以使用可编程序逻辑阵列电路,通过编程的方法实现任意的逻辑功能。