1933年,美国数学家D.N.Lehmer造出一台电气计算机用来分解1-1000万之间的全部天然数为素数因子。
1946年2月14日,由美国军方定制的世界上第一台电子计算机“电子数字积分计算机”(ENIAC Electronic Numerical And Calculator)在美国宾夕法尼亚大学问世了。ENIAC(中文名:埃尼阿克)是美国奥伯丁武器试验场为了知足计算弹道须要而研制成的,这台计算器使用了17840支电子管,大小为80英尺×8英尺,重达28t(吨),功耗为170kW,其运算速度为每秒5000次的加法运算,造价约为487000美圆。ENIAC的问世具备划时代的意义,代表电子计算机时代的到来。在之后60多年里,计算机技术以惊人的速度发展,没有任何一门技术的性能价格比能在30年内增加6个数量级。
第1代:电子管数字机(1946—1958年)
硬件方面,逻辑元件采用的是真空电子管,主存储器采用汞延迟线、阴极射线示波管静电存储器、磁鼓、磁芯;外存储器采用的是磁带。软件方面采用的是机器语言、汇编语言。应用领域以军事和科学计算为主。
特色是体积大、功耗高、可靠性差。速度慢(通常为每秒数千次至数万次)、价格昂贵,但为之后的计算机发展奠基了基础。
第2代:晶体管数字机(1958—1964年)
硬件方的操做系统、高级语言及其编译程序。应用领域以科学计算和事务处理为主,并开始进入工业控制领域。特色是体积缩小、能耗下降、可靠性提升、运算速度提升(通常为每秒数10万次,可高达300万次)、性能比第1代计算机有很大的提升。
第3代:集成电路数字机(1964—1970年)
硬件方面,逻辑元件采用中、小规模集成电路(MSI、SSI),主存储器仍采用磁芯。软件方面出现了分时操做系统以及结构化、规模化程序设计方法。特色是速度更快(通常为每秒数百万次至数千万次),并且可靠性有了显著提升,价格进一步降低,产品走向了通用化、系列化和标准化等。应用领域开始进入文字处理和图形图像处理领域。
第4代:大规模集成电路机(1970年至今)
硬件方面,逻辑元件采用大规模和超大规模集成电路(LSI和VLSI)。软件方面出现了数据库管理系统、网络管理系统和面向对象语言等。特色是1971年世界上第一台微处理器在美国硅谷诞生,开创了微型计算机的新时代。应用领域从科学计算、事务管理、过程控制逐步走向家庭。html
因为集成技术的发展,半导体芯片的集成度更高,每块芯片可容纳数万乃至数百万个晶体管,而且能够把运算器和控制器都集中在一个芯片上、从而出现了微处理器,而且能够用微处理器和大规模、超大规模集成电路组装成微型计算机,就是咱们常说的微电脑或PC机。微型计算机体积小,价格便宜,使用方便,但它的功能和运算速度已经达到甚至超过了过去的大型计算机。另外一方面,利用大规模、超大规模集成电路制造的各类逻辑芯片,已经制成了体积并不很大,但运算速度可达一亿甚至几十亿次的巨型计算机。我国继1983年研制成功每秒运算一亿次的银河Ⅰ这型巨型机之后,又于1993年研制成功每秒运算十亿次的银河Ⅱ型通用并行巨型计算机。这一时期还产生了新一代的程序设计语言以及数据库管理系统和网络软件等。
随着物理元、器件的变化,不只计算机主机经历了更新换代,它的外部设备也在不断地变革。好比外存储器,由最初的阴极射线显示管发展到磁芯、磁鼓,之后又发展为通用的磁盘,现又出现了体积更小、容量更大、速度更快的只读光盘(CD—ROM)。python
02 计算机的组成程序员
传统电脑系统的硬体单元通常可分为输入单元、输出单元、算术逻辑单元、控制单元及记忆单元,其中算术逻辑单元和控制单元合称中央处理单元(Center Processing Unit,CPU)。数据库
03 计算机的基本原理缓存
1.3 基本工做原理网络
(1)数制转换工具
10进制转换成其余的都是除以要转换成的那个数,也就是说转换成二进制的就除以2,转换成八进制的就除以8,转换成十六进制的就除以16,而后倒取余数。布局
不一样的进位制数转化为十进制数:按权展开相加
十进制是权是10;二进制是权是2;十六进制是权是16;八进制是权是8;
例:110011(二进制数)=1*2^5+1*2^4+0*2^3+0*2^2+1*2^1+1*2^0=32+16+2+1=51
1507(八进制数)=1*8^3 + 5*8^2 + 0*8^1 + 7*8^0 = 839
2AF5(十六进制数)=2*16^3 + A*16^2+ F*16^1 + 5*16^0 = 10997性能
二进制换算八进制
将二进制数从右到左,三位一组,不够补0
例:二进制数10110111011换八进制数:
010 110 111 011
结果为:2673 测试
二进制转换十六进制
二进制数转换为十六进制数的方法也相似,从右到左,四位一组,不够补0
如上题:
0101 1011 1011
结果为:5BB
(2)机器数与码制
各类数据在计算机中表示的形式称为机器数,其特色是采用二进制计数制,数的符号用0、1表示,小数点则隐含表示而不占位置。机器数对应的实际数值称为真值。
机器数有无符号数和带符号数之分。无符号数表示正数,在机器数中没有符号位。对于无符号数,若约定小数点的位置在机器数的最低位以后,则是纯整数;若约定小数点的位置在机器数的最高位以前,则是纯小数。对于带符号数,机器数的最高位一晴地正负的符号位,其他位则表示数值。若约定小数点的位置在机器数的最低数值位以后,则是纯整数;若约定小数点的位置 在机器数的最高数值位以前,则是纯小数位。
为了便于运算,带符号的机器右数可采用原码,反码和补码等不一样的编码方法,机器数的这些编码方法称为码制。
1. 原码表示法
数值X的原码记为[X]原,最高位是符号位,0表示正号,1表示负号,其他位表示数值的绝对值。
2.反码表示法
数值X的原码记为[X]反,最高位是符号位,0表示正号,1表示负号,正数的反码和原码相同,负数的反码则是其绝对值按位求反。
3.补码表示法
数值X的原码记为[X]补,最高位是符号位,0表示正号,1表示负号,正数的补码与其原码和反码相同,负数的补码则等于其反码的末尾加1。
4.移码表示法
.移码表示法是在数X上增长一个偏移量来定义的,经常使用于表示浮点数中的阶码。若是机器字长为n,在偏移2的(n-1)次方的状况下,只要将将码的符号位取反即可得到相应的移码表示。
(3)汉字编码
区位码
为了使每个汉字有一个全国统一的代码,1980年,我国颁布了第一个汉字编码的国家准: GB2312-80《信息交换用汉字编码字符集》基本集,这个字符集是我国中文信息处理技术的发展基础,也是目前国内全部汉字系统的统一标准。
全部的国标汉字与符号组成一个94×94的矩阵。在此方阵中,每一行称为一个"区",每一列称为一个"位",所以,这个方阵实际上组成了一个有94个区(区号分别为0 1到94)、每一个区内有94个位(位号分别为01到94)的汉字字符集。一个汉字所在的区号和位号简单地组合在一块儿就构成了该汉字的"区位码"。在汉字的区位码中,高两位为区号,低两位为位号。
在区位码中,01-09区为682个特殊字符,16~87区为汉字区,包含6763个汉字 。其中16-55区为一级汉字(3755个最经常使用的汉字,按拼音字母的次序排列),56-87区为二级汉字(3008个汉字,按部首次序排列)。
· 须要注意的是:区位码一般都是用十进制表示的,例如“诚”字的区位码为1947,也就说它位于19区第47个字符。
国标码
国家标准代码,简称国标码,是中华人民共和国的中文经常使用汉字编码集。国家标准强制标准冠以“GB”。现时中华人民共和国官方强制使用GB 18030标准,但较旧的计算机仍然使用GB 2312。国标码 =区位码(16进制化--区码和位码分别进行16进制转化)+2020H。
机内码
计算机只识别由0、1组成的代码,ASCII码是英文信息处理的标准编码,汉字信息处理也必须有一个统一的标准编码。 汉字交换码(国标码)主要用于汉字信息交换,我国国家标准局于1981年5月颁布了《信息交换用汉字编码字符集——基本集》,代号为GB2312-80,共对6763个汉字和682个图形字符进行了编码。
其编码原则为:汉字用两个字节表示,原则上,两个字节能够表示 256×256=65536种不一样的符号,做为汉字编码表示的基础是可行的。但考虑到汉字编码与其它国际通用编码,如ASCII西文字符编码的关系,我国国家标准局采用了加以修正的两字节汉字编码方案,只用了两个字节的低7位。这个方案能够容纳128×128=16384种不一样的汉字,但为了与标准ASCII码兼容,每一个字节中都不能再用32个控制功能码和码值为32的空格以及127的操做码。因此每一个字节只能有94个编码。这样,双七位实际可以表示的字数是:94×94=8836个。
机内码 = 国标码 + 8080H
机内码 = 区位码(16进制化--区码和位码分别进行16进制转化) + a0a0H
相互转换
内码转换为区位码
区位码: 区码=内码高字节-0xa0
位码=内码低字节-0xa0
例如:“国”内码为:0xb9,0xfa
16进制表示的区位码:0x19,0x5a
其区位码(默认为10进制):2590
区位码转换为内码
内码: 内码高字节=区码+0xa0
内码低字节=位码+0xa0
例如:“海”区位码为:2603
16进制表示的区位码:0x1a,0x03
其内码(默认为16进制):0xba,0xa3
字模
汉字在显示的时候,是以点阵的形式显示出来的,常见到的有16*16点阵、24*24点阵、32*32点阵。好比说“啊”的16*16点阵字模以下,共256Bits,占用32 Bytes:
0x00,0x00,0xf7,0x7e,0x95,0x04,0x95,0x04,0x96,0x74,0x96,0x54,0x95,0x54,0x95,0x54,0x95,0x54,0xf5,0x54,0x97,0x74,0x04,0x04,0x04,0x04,0x05,0x04,0x04,0x14,0x04,0x08
字模显示的时候,以两个字节表示一行像素点,16行就构成了一个完整的字模。屏幕在显示的时候,1显示为亮色,0显示为背景色,这样就能把字体显示出来。
字库
字库,就是全部汉字字模的集合。显然,在编排这些字模的时候须要必定的顺序(规则),而这个规则就是“机内码”。根据机内码的汉字布局,将对应的汉字字模进行整合,造成字库文件。在使用的时候,应用程序根据汉字的机内码,从字库中找到对应的存储位置,取出字模,进行显示。机内码就是汉字在字库中的索引。
在区位码中,01-09区为682个特殊字符,16~87区为汉字区,有效汉字6768个。在制做字库的时候把特殊字符删除,只使用有效汉字区。也就是说咱们从第16区的第1位开始进行字模收集,当第16区收集结束,紧接着收集第17区,直到第87区编排结束。总共收集6768个汉字,占用空间216576 Bytes。
(4)CPU
CPU从逻辑上能够划分红3个模块,分别是控制器、运算器和内部寄存器,这三部分由CPU内部总线链接起来。以下所示:
控制器:控制单元是整个CPU的指挥控制中心,由指令寄存器IR(Instruction Register)、指令译码器ID(Instruction Decoder)和操做控制器OC(Operation Controller)等,对协调整个电脑有序工做极为重要。它根据用户预先编好的程序,依次从存储器中取出各条指令,放在指令寄存器IR中,经过指令译码(分析)肯定应该进行什么操做,而后经过操做控制器OC,按肯定的时序,向相应的部件发出微操做控制信号。操做控制器OC中主要包括节拍脉冲发生器、控制矩阵、时钟脉冲发生器、复位电路和启停电路等控制逻辑。
运算器:是运算器的核心。能够执行算术运算(包括加减乘数等基本运算及其附加运算)和逻辑运算(包括移位、逻辑测试或两个值比较)。相对控制单元而言,运算器接受控制单元的命令而进行动做,即运算单元所进行的所有操做都是由控制单元发出的控制信号来指挥的,因此它是执行部件。
内部寄存器:包括CPU片内缓存和寄存器组,是CPU中暂时存放数据的地方,里面保存着那些等待处理的数据,或已经处理过的数据,CPU访问寄存器所用的时间要比访问内存的时间短。采用寄存器,能够减小CPU访问内存的次数,从而提升了CPU的工做速度。但由于受到芯片面积和集成度所限,寄存器组的容量不可能很大。寄存器组可分为专用寄存器和通用寄存器。专用寄存器的做用是固定的,分别寄存相应的数据。而通用寄存器用途普遍并可由程序员规定其用途,通用寄存器的数目因微处理器而异。这个是咱们之后要介绍这个重点,这里先提一下。
咱们将上图细化一下,能够得出CPU的工做原理归纳以下:
总的来讲,CPU从内存中一条一条地取出指令和相应的数据,按指令操做码的规定,对数据进行运算处理,直到程序执行完毕为止。
上图中我没有画总线,只是用逻辑方式对其进行呈现。缘由早期Intel的微处理器,诸如8085,8086/8088CPU,广泛采用了地址总线和数据总线复用技术,即将部分(或所有)地址总线与数据总线共用CPU的一些引脚。例如8086外部地址总线有20根,数据总线复用了地址总线的前16根引脚。复用的数据总线和地址总线虽然能够少CPU的引脚数,但却引入了控制逻辑及操做序列上的复杂性。因此,自80286开始,Intel的CPU才采用分开的地址总线和数据总线。
无论是复用仍是分开,对咱们理解CPU的运行原理没啥影响,上图没画总线的目的就是怕有些人太过于追求细节,一头扎下去,浮不起来,不能从宏观上藐视敌人。
总结一下,CPU的运行原理就是:控制单元在时序脉冲的做用下,将指令计数器里所指向的指令地址(这个地址是在内存里的)送到地址总线上去,而后CPU将这个地址里的指令读到指令寄存器进行译码。对于执行指令过程当中所须要用到的数据,会将数据地址也送到地址总线,而后CPU把数据读到CPU的内部存储单元(就是内部寄存器)暂存起来,最后命令运算单元对数据进行处理加工。周而复始,一直这样执行下去
关于一些笔记
关于编码 http://www.cnblogs.com/skynet/archive/2011/05/03/2035105.html
32位的系统最多可使用 4 G 的内存 64位的系统可使用16T 左右的内存。
变量的命名规则:
01 具备描述性,见名知意
02 由数字,字母,下划线组成
03 不能以数字开头
04 不能够是保留字符
05 变量名不能是中文
06 在python中 区分大小写
如下关键词不能是变量:
and as assert break class continue def del elif else except exec finally for from global if import in is lambda not or pass print raise return try while with yield
在python 2.7 中写入中文,须要在程序第一行加上
#!-*- coding:utf-8 -*-
input 接受的全部数据都会默认看成字符串处理
if 后面必须加 : (缩进)
tab 键 != 4个空格
缩进级别必须保持一致