信息的储存
用01串表示各种信息
1.在计算机内,信息是用0和1来储存的
2.bit是储存的最小单位,一般用“b”表示
3.8b=1B(一个字节),1024B=1KB,1024KB=1MB,1024MB=1GB,1024GB=1TB
4.用01串表示字符的规则叫做编码,常见的有:ASCII编码、Unicode编码
5.图片、视屏、音频也可以用01串表示
二进制与十六进制
我们平时用的是十进制,有十个数字:0~9
而K进制就是逢K进1
假设有一个n+1位的K进制数:
则它的值为
二进制、十六进制互换
二进制变十六进制:每4位变成十六进制,左边不足补0
十六进制变二进制:每位变成二进制,除去前导零
| 二进制 | 十六进制 |
|---|---|
十进制变成K进制
设要转换的数为A
1.记录A mod K的值
2.记录A除以K值的整数部分
3.重复上述操作直至得到零
4.将步骤1记录的值倒序连在一起即可
原码、反码、补码
原码:最高位是符号位(0表示正数,1表示负数),剩下的表示绝对值
反码:正数的反码就是原码,负数的反码是原码除符号位取反(0变1,1变0)
补码:正数的补码就是原码,负数的补码是反码加1(可能有溢出,溢出的话去掉最高位)
整数与小数的计算机表示
一个计算机是几位的,说的是CPU中通用寄存器的位数(这里的位数指bit)
整数
用它的补码表示
小数
定点数:已经规定整数部分的位数与小数部分的位数
浮点数:表示成的形式,M、E及其符号的位数都是有规定的(规定会因为CPU厂家、型号的不同而不同)
计算机程序设计语言
机器语言
计算机可以直接执行的指令就是机器语言,由01串组成
每条机器语言是什么格式、完成什么功能,都是由CPU的设计者事先规定好的
有机器语言组成的程序,叫做可执行文件
下面这个程序,可以把两个数相加
1000 0001 0000011000000000
1000 0010 1000000000000000
1100 0001 0010
1001 0001 0000110000000000
上面的每条指令,高四位表示指令所要进行的操作,其余部分表示操作对象
第1条指令:“1000”表示将数据从内存复制到寄存器,“0001”表示将数据复制到1号寄存器,“0000011000000000”表示数据来源于这个内存地址,这条指令表示将内存地址0000011000000000存放的数据复制到1号寄存器
第2条指令:同理,这条指令表示将内存地址1000000000000000存放的数据复制到2号寄存器
第3条指令:“1100”表示进行加法操作,这条指令表示将1号寄存器与2号寄存器存放的数据加起来,结果存放到1号寄存器
第4条指令:“1001”表示将数据从寄存器复制到内存,这条指令表示这条指令表示将1号寄存器存放的数据复制到内存地址0000110000000000
可以看到机器语言非常麻烦,用它来编程我们不得不记住每一条二进制代码,于是就出现了汇编语言
汇编语言
汇编语言与机器语言的主要区别就是将难记的指令变成英文助记符:“1100”->“ADD”、“1000”->“MOV”,甚至还将1号寄存器变成“AX”,2号寄存器变成“BX”,并且还能加标点符号、用十六进制代替二进制
刚才那个加法的例子用汇编语言写如下
MOV AX,0600
MOV BX,8000
ADD AX,BX
MOV 0C00,AX
很明显,汇编语言比机器语言好用多了,在用汇编器把它编译成机器语言就变成可执行文件了
虽然如此,但是入门的门槛还是太高了,我们必须对指令系统乃至硬件都非常了解,并且不可移植,于是就出现了高级语言
高级语言
高级语言是接近自然语言的编程语言的总称
前面那个加法的例子用高级语言写如下
c=a+b
可以看到,用高级语言编程,空间的配置根本不需要我们操心,只需要关注程序的逻辑即可
并且高级语言的编程跟硬件没有太大关系,所以只要稍加改动甚至不改动就可以在不同环境运行
这个过程叫做移植
高级语言的历史
1955年 FORTRAN:主要用于科学计算
1960年 ALGOL 60:首次引入局部性、递归、BNF范式等概念
1964年 BASIC:简单易学,面向初学者
1968年 Pascal:结构化程序语言
1970年 C:面向硬件,效率高
1983年 C++:向下兼容C,同时引入面向对象和泛型编程
1991年 Python:简单易学,具有许多丰富且强大类库,容易移植
1994年 PHP:网站开发语言
1995年 Java:移植方便,几乎不用改动
2003年 C#:模仿Java并改进
小结
1.在计算机中,所有信息都是由01串表示的,二进制的4位正好对应十六进制的1位
2.在计算机中,整数是由补码表示的
3.在计算机中,小数大多是由浮点数()表示的,浮点数包括:M、M的符号、E、E的符号
4.机器语言用01串进行编程的;汇编语言用助记符代替01串;高级语言比较接近自然语言