新浪微博
关注微博
人类用文字、图表、数字表达和记录着世界上各种各样的信息,便于人们用来处理和交流。现在可以把这些信息都输入到计算机中,由计算机来保存和处理。前面提到,当代冯·诺依曼型计算机都使用二进制来表示数据,本节所要讨论的就是用二进制来表示这些 数据。
经过收集、整理和组织起来的数据,能成为有用的信息。数据是指能够输入计算机并被计算机处理的数字、字母和符号的集合。平常所看到的景象和听到的事实,都可以用数据来描述。可以说,只要计算机能够接受的信息都可叫数据。
计算机数据的表示经常用到以下几个概念。在计算机内部,数据都是以二进制的形式存储和运算的。
(1)位
二进制数据中的一个位(bit)简写为b,音译为比特,是计算机存储数据的zui小单位。一个二进制位只能表示0或1两种状态,要表示更多的信息,就要把多个位组合成一个整体,一般以8位二进制组成一个基本单位。
(2)字节
字节是计算机数据处理的zui基本单位,并主要以字节为单位解释信息。字节(Byte)简记为B,规定一个字节为8位,即1B=8bit。每个字节由8个二进制位组成。一般情况下,一个ASCII码占用一个字节,一个汉字国际码占用两个字节。
(3)字
一个字通常由一个或若干个字节组成。字(Word)是计算机进行数据处理时,一次存取、加工和传送的数据长度。由于字长是计算机一次所能处理信息的实际位数,所以,它决定了计算机数据处理的速度,是衡量计算机性能的一个重要指标,字长越长,性能越好。
(4)数据的换算关系
1Byte=8bit,1KB=1024B,1MB=1024KB,1GB=1024MB。
计算机型号不同,其字长是不同的,常用的字长有8、16、32和64位。一般情况下,IBM PC/XT的字长为8位,80286微机字长为16位,80386/80486微机字长为32位,Pentium系列微机字长为64位。
例如,一台微机,内存为256MB,软盘容量为1.44MB,硬盘容量为80GB,则它实际的存储字节数分别为:
内存容量=256×1024×1024B=268435456B
软盘容量=1.44×1024×1024B=1509949.44B
硬盘容量=80×1024×1024×1024B=85899345920B
如何表示正负和大小,在计算机中采用什么计数制,是学习计算机的一个重要问题。数据是计算机处理的对象,在计算机内部,各种信息都必须通过数字化编码后才能进行存储和处理。
由于技术原因,计算机内部一律采用二进制,而人们在编程中经常使用十进制,有时为了方便还采用八进制和十六进制。理解不同计数制及其相互转换是非常重要的。
在计算机中,二进制并不符合人们的习惯,但是计算机内部却采用二进制表示信息,其主要原因有如下4点:
(1)电路简单
在计算机中,若采用十进制,则要求处理10种电路状态,相对于两种状态的电路来说,是很复杂的。而用二进制表示,则逻辑电路的通、断只有两个状态。例如:开关的接通与断开,电平的高与低等。这两种状态正好用二进制的0和1来表示。
(2)工作可靠
在计算机中,用两个状态代表两个数据,数字传输和处理方便、简单、不容易出错,因而电路更加可靠。
(3)简化运算
在计算机中,二进制运算法则很简单。例如:相加减的速度快,求积规则有3个,求和规则也只有3个。
(4)逻辑性强
二进制只有两个数码,正好代表逻辑代数中的“真”与“假”,而计算机工作原理是建立在逻辑运算基础上的,逻辑代数是逻辑运算的理论依据。用二进制计算具有很强的逻 辑性。
用若干数位(由数码表示)的组合去表示一个数,各个数位之间是什么关系,即逢“几”进位,这就是进位计数制的问题。也就是数制问题。数制,即进位计数制,是人们利用数字符号按进位原则进行数据大小计算的方法。通常是以十进制来进行计算的。另外,还有二进制、八进制和十六进制等。
在计算机的数制中,要掌握3个概念,即数码、基数和位权。下面简单地介绍这3个概念。
数码:一个数制中表示基本数值大小的不同数字符号。例如,八进制有8个数码:0、1、2、3、4、5、6、7。
基数:一个数值所使用数码的个数。例如,八进制的基数为8,二进制的基数为2。
位权:一个数值中某一位上的1所表示数值的大小。例如,八进制的123,1的位权是64,2的位权是8,3的位权是1。
十进制的特点如下:
(1)有10个数码:0、1、2、3、4、5、6、7、8、9。
(2)基数:10。
(3)逢十进一(加法运算),借一当十(减法运算)。
(4)按权展开式。对于任意一个n位整数和m位小数的十进制数D,均可按权展 开为:
D=Dn-1·10n-1+Dn-2·10n-2+…+D1·101+D 0·10 0+D -1·10 –1+…+D –m·10 –m
例:将十进制数456.24写成按权展开式形式为:
456.24=4×10 2+5×101+6×100+2×10-1+4×10-2
二进制有如下特点:
(1)有两个数码:0、1。
(2)基数:2。
(3)逢二进一(加法运算),借一当二(减法运算)。
(4)按权展开式。对于任意一个n位整数和m位小数的二进制数D,均可按权展 开为:
D=Bn-1·2n-1+Bn-2·2n-2+…+B1·21+B0·20+B-1·2–1+…+B–m·2-m
例:把(11001.101)2写成展开式,它表示的十进制数为:
1×2 4+1×2 3+0×22+0×21+1×20+1×2-1+0×2-2+1×2-3=(25.625)10
八进制的特点如下:
(1)有8个数码:0、1、2、3、4、5、6、7。
(2)基数:8。
(3)逢八进一(加法运算),借一当八(减法运算)。
(4)按权展开式。对于任意一个n位整数和m位小数的八进制数D,均可按权展 开为:
D=On-1·8n-1+…+O1·81+O0·80+O-1·8 –1+…+O–m·8-m
例:(5346)8相当于十进制数为:
5×83+3×82+4×81+6×80=(2790)10
十六进制有如下特点:
(1)有16个数码:0、1、2、3、4、5、6、7、8、9、A、B、C、D、E、F。
(2)基数:16。
(3)逢十六进一(加法运算),借一当十六(减法运算)。
(4)按权展开式。对于任意一n位整数和m位小数的十六进制数D,均可按权展 开为:
D=Hn-1·16n-1+…+H1·161+H 0·16 0+H -1·16 –1+…+H –m·16 -m
在16个数码中,A、B、C、D、E和F这6个数码分别代表十进制的10、11、12、13、14和15,这是国际上通用的表示法。
例:十六进制数(4C4D)16代表的十进制数为:
4×163+C×16 2+4×161+D×160=(19533)10
二进制数与其他数之间的对应关系如表1-1所示。
表1-1 几种常用进制之间的对照关系
十 进 制 |
二 进 制 |
八 进 制 |
十 六 进 制 |
0 |
0000 |
0 |
0 |
1 |
0001 |
1 |
1 |
2 |
0010 |
2 |
2 |
3 |
0011 |
3 |
3 |
4 |
0100 |
4 |
4 |
5 |
0101 |
5 |
5 |
6 |
0110 |
6 |
6 |
7 |
0111 |
7 |
7 |
8 |
1000 |
10 |
8 |
9 |
1001 |
11 |
9 |
10 |
1010 |
12 |
A |
11 |
1011 |
13 |
B |
12 |
1100 |
14 |
C |
13 |
1101 |
15 |
D |
14 |
1110 |
16 |
E |
15 |
1111 |
17 |
F |
不同数进制之间进行转换应遵循转换原则。转换原则是:两个有理数如果相等,则有理数的整数部分和分数部分一定分别相等。也就是说,若转换前两数相等,转换后仍必须相等,数制的转换要遵循一定的规律。
(1)二进制数转换成十进制数
将二进制数转换成十进制数,只要将二进制数用计数制通用形式表示出来,计算出结果,便得到相应的十进制数。
例:(1101100.111)2=1×26+1×25+1×23+1×22+1×2-1+1×2-2+1×2-3
=64+32+8+4+0.5+0.25+0.125
=(108.875)10
(2)八进制数转换为十进制数
八进制数→十进制数:以8为基数按权展开并相加。
例:把(652.34)8转换成十进制。
解:(652.34)8=6×82+5×81+2×80+3×8-1+4×8-2
=384+40+2+0.375+0.0625
=(426.4375)10
(3)十六进制数转换为十进制数
十六进制数→十进制数:以16为基数按权展开并相加。
例:将(19BC.8)16转换成十进制数。
解:(19BC.8)16=1×163+9×162+B×161+C×160+8×16-1
=4096+2304+176+12+0.5
=(6588.5)10
(1)整数部分的转换
整数部分的转换采用的是除2取余法。其转换原则是:将该十进制数除以2,得到一个商和余数(K0),再将商除以2,又得到一个新商和余数(K1),如此反复,得到的商是0时得到余数(Kn-1),然后将所得到的各位余数,以zui后余数为zui高位,zui初余数为zui低位依次排列,即Kn-1Kn-2…K1K0,这就是该十进制数对应的二进制数。这种方法又称为“倒 序法”。
例:将(126)10转换成二进制数。
结果为:(126)10=(1111110)2
(2)小数部分的转换
小数部分的转换采用乘2取整法。其转换原则是:将十进制数的小数乘以2,取乘积中的整数部分作为相应二进制数小数点后zui高位K-1,反复乘2,逐次得到K-2、K-3、…、K-m,直到乘积的小数部分为0或1的位数达到精确度要求为止。然后把每次乘积的整数部分由上而下依次排列起来(K-1K-2…K-m),即是所求的二进制数。这种方法又称为“顺序法”。
例:将十进制数(0.534)10转换成相应的二进制数。
结果为:(0.534)10=(0.10001)2
例:将(50.25)10转换成二进制数。
分析:对于这种既有整数又有小数部分的十进制数,可将其整数和小数分别转换成二进制数,然后再把两者连接起来即可。
因为(50)10=(110010)2,(0.25)10=(0.01)2
所以(50.25)10=(110010.01)2
(1)八进制转换为二进制数
八进制数转换成二进制数所使用的转换原则是“一位拆三位”,即把一位八进制数对应于三位二进制数,然后按顺序连接即可。
例:将(64.54)8转换为二进制数。
6 4 . 5 4
↓ ↓ ↓ ↓ ↓
110 100 . 101 100
结果为:(64.54)8=(110100.101100)2
(2)二进制数转换成八进制数
二进制数转换成八进制数可概括为“三位并一位”,即从小数点开始向左右两边以每三位为一组,不足三位时补0,然后每组改成等值的一位八进制数即可。
例:将(110111.11011)2转换成八进制数。
110 111 . 110 110
↓ ↓ ↓ ↓ ↓
6 7 . 6 6
结果为:(110111.11011)2=(67.66)8
(1)二进制数转换成十六进制数
二进制数转换成十六进制数的转换原则是“四位并一位”,即以小数点为界,整数部分从右向左每4位为一组,若zui后一组不足4位,则在zui高位前面添0补足4位,然后从左边第yi组起,将每组中的二进制数按权数相加得到对应的十六进制数,并依次写出即可;小数部分从左向右每4位为一组,zui后一组不足4位时,尾部用0补足4位,然后按顺序写出每组二进制数对应的十六进制数。
例:将(1111101100.0001101)2转换成十六进制数。
0011 1110 1100 . 0001 1010
↓ ↓ ↓ ↓ ↓ ↓
3 E C . 1 A
结果为:(1111101100.0001101)2=(3EC.1A)16
(2)十六进制数转换成二进制数
十六进制数转换成二进制数的转换原则是“一位拆四位”,即把1位十六进制数写成对应的4位二进制数,然后按顺序连接即可。
例:将(C41.BA7)16转换为二进制数。
C 4 1 . B A 7
↓ ↓ ↓ ↓ ↓ ↓ ↓
1100 0100 0001 . 1011 1010 0111
结果为:(C41.BA7)16=(110001000001.101110100111)2
在程序设计中,为了区分不同进制,常在数字后加一英文字母作为后缀以示区别。
l 十进制数,在数字后面加字母D或不加字母也可以,如6659D或6659。
l 二进制数,在数字后面加字母B,如1101101B。
l 八进制数,在数字后面加字母O,如1275O。
l 十六进制数,在数字后面加字母H,如CFE7BH。
二进制数的运算包括算术运算和逻辑运算。
二进制数的算术运算包括加法、减法、乘法和除法运算。
(1)二进制数的加法运算
二进制数的加法运算法则是:0+0=0,0+1=1+0=1,1+1=10(向高位进位)。
例:求(101101.10001)2+(1011.11001)2的值。
解: 1 0 1 1 0 1 . 1 0 0 0 1
+ 1 0 1 1 . 1 1 0 0 1
1 1 1 0 0 1 . 0 1 0 1 1
结果为:(101101.10001)2+(1011.11001)2 =(111001.01011)2
总结:从以上加法的过程可知,当两个二进制数相加时,每一位是3个数相加,对本位则是把被加数、加数和来自低位的进位相加(进位可能是0,也可能是1)。
(2)二进制数的减法运算
二进制数的减法运算法则是:0-0=1-1=0,1-0=1,0-1=1(借1当二)。
例:求(110000.11)2-(001011.01)2的值。
解: 1 1 0 0 0 0 . 1 1
- 0 0 1 0 1 1 . 0 1
1 0 0 1 0 1 . 1 0
结果为:(110000.11)2-(001011.01)2=(100101.10)2
总结:从以上运算过程可知,当两数相减时,有的位会发生不够减的情况,要向相邻的高位借1当2。所以,在做减法时,除了每位相减外,还要考虑借位情况,实际上每位有3个数参加运算。
(3)二进制数的乘法运算
二进制数的乘法运算法则是:0×0=0,0×1=1×0=0,1×1=1。
例:求(1010)2×(1011)2的值。
解: 1 0 1 0
× 1 0 1 1
1 0 1 0
1 0 1 0
0 0 0 0
+ 1 0 1 0
1 1 0 1 1 1 0
结果为:(1010)2×(1011)2=(1101110)2
总结:由以上运算过程可知,当两数相乘时,每个部分积都取决于乘数。乘数的相应位为1时,该次的部分积等于被乘数;为0时,部分积为0。每次的部分积依次左移一位,将各部分积累起来,就得到了zui终结果。
(4)二进制数的除法运算
二进制数除法运算规则是:0÷0=0,0÷1=0(1÷0无意义),1÷1=1。
例:求(111101)2÷(1100)2的值。
解: 1 0 1
1100√ 1 1 1 1 0 1
- 1 1 0 0
1 1 0 1
- 1 1 0 0
1
结果为:商为101,余数为1。
总结:在计算机内部,二进制的加法是基本运算,利用加法可以实现二进制数的减法、乘法和除法运算。在计算机的运算过程中,应用了“补码”进行运算。
在计算机中,除了能表示正负、大小的“数量数”以及相应的加、减、乘、除等基本算术运算外,还能表示事物逻辑判断,即“真”、“假”、“是”、“非”等“逻辑数”的运算。能表示这种数的变量称为逻辑变量。在逻辑运算中,都是用“1”或“0”来表示“真”或“假”,由此可见,逻辑运算是以二进制数为基础的。
计算机的逻辑运算区别于算术运算的主要特点是:逻辑运算是按位进行的,位与位之间不像加减运算那么有进位或借位的关系。
逻辑运算主要包括的运算有:逻辑加法(又称“或”运算)、逻辑乘法(又称“与”运算)和逻辑“非”运算。此外,还有“异或”运算。
(1)逻辑与运算(乘法运算)
逻辑与运算常用符号“×”、“∧”或“&”来表示。如果A、B、C为逻辑变量,则A和B的逻辑与可表示成A×B=C、A∧B=C或A&B=C,读作“A与B等于C”。一位二进制数的逻辑与运算规则如表1-2所示。
表1-2 与运算规则
A |
B |
A∧B(C) |
0 |
0 |
0 |
0 |
1 |
0 |
1 |
0 |
0 |
1 |
1 |
1 |
由表1-2可知,逻辑与运算表示只有当参与运算的逻辑变量都取值为1时,其逻辑乘积才等于1,即一假必假,两真才真。
这种逻辑与运算在实际生活中有许多应用,例如,计算机的电源要想接通,必须把实验室的电源总闸、USP电源开关以及计算机机箱的电源开关都接通才行。这些开关是串在一起的,它们按照“与”逻辑接通。为了书写方便,逻辑与运算的符号可以略去不写(在不致混淆的情况下),即A×B=A∧B=AB。
例:设A=1110011,B=1010101,求A∧B。
解:
1 1 1 0 0 1 1
∧ 1 0 1 0 1 0 1
1 0 1 0 0 0 1
结果为:A∧B=1010001。
(2)逻辑或运算(加法运算)
逻辑或运算通常用符号“+”或“ ”来表示。如果A、B、C为逻辑变量,则A和B的逻辑或可表示成A+B=C或A B=C,读作“A或B等于C”。其运算规则如表1-3 所示。
表1-3 或运算规则
A |
B |
A V B(C) |
0 |
0 |
0 |
0 |
1 |
1 |
1 |
0 |
1 |
1 |
1 |
1 |
由表1-3可知,逻辑或运算是:在给定的逻辑变量中,A或B只要有一个为1,其逻辑或的值为1;只有当两者都为0,逻辑或才为0。即一真必真,两假才假。
这种逻辑或运算在实际生活中有许多应用,例如,房间里有一盏灯,装了两个开关,这两个开关是并联的。显然,任何一个开关接通或两个开关同时接通,电灯都会亮。
例:设A=11001110,B=10011011,求A B。
解: 1 1 0 0 1 1 1 0
+ 1 0 0 1 1 0 1 1
1 1 0 1 1 1 1 1
结果为:A B=11011111。
(3)逻辑非运算(逻辑否定、逻辑求反)
设A为逻辑变量,则A的逻辑非运算记作 。逻辑非运算的规则为:如果不是0,则惟一的可能性就是1;反之亦然。逻辑非运算的真值表如表1-4所示。
表1-4 非运算规则
A |
|
0 |
1 |
1 |
0 |
例如,室内的电灯,不是亮,就是灭,只有两种可能性。
例:设A=111011001,B=110111101,求 、 。
解: =000100110, =001000010。
(4)逻辑异或运算(半加运算)
逻辑异或运算符为“ ”。如果A、B、C为逻辑变量,则A和B的逻辑异或可表示成A B=C,读作“A异或B等于C”。逻辑异或的运算规则如表1-5所示。
表1-5 逻辑异或的运算规则
A |
B |
A B(C) |
0 |
0 |
0 |
0 |
1 |
1 |
1 |
0 |
1 |
1 |
1 |
0 |
由表1-5可知,在给定的两个逻辑变量中,只有两个逻辑变量取值相同,异或运算的结果就为0;只有相异时,结果才为1。即一样时为0,不一样才为1。
例:设A=11010011,B=10110111,求A B。
解: 1 1 0 1 0 0 1 1
1 0 1 1 0 1 1 1
0 1 1 0 0 1 0 0
结果为:A B=01100100。
当两个变量之间进行逻辑运算时,只在对应位之间按上述规律进行逻辑运算,不同位之间没有任何关系,当然,也就不存在算术运算中的进位或借位问题。
好仕途遴选
微信公众号:ahlxksw
让学员带着“?”来,带着“!”踏上成“公”之路