580 likes | 1k Views
二进制、数制及其 相互转换. 什么是数制. 数制 : 数码、基数和位权 数码:数制中表示基本数值大小的不同数字符号。例如,十进制有 10 个数码: 0 、 1 、 2 、 3 、 4 、 5 、 6 、 7 、 8 、 9 。 基数:数制所使用数码的个数。例如,二进制的基数为 2 ;十进制的基数为 10 。 位权:数制中某一位上的 1 所表示数值的大小(所处位置的价值)。例如,十进制的 123 , 1 的位权是 100 , 2 的位权是 10 , 3 的位权是 1 。. 二进制、数制及其相互转换. (一)计算机中使用二进制数 (二)进位计数制
E N D
什么是数制 数制: 数码、基数和位权 • 数码:数制中表示基本数值大小的不同数字符号。例如,十进制有10个数码:0、1、2、3、4、5、6、7、8、9。 • 基数:数制所使用数码的个数。例如,二进制的基数为2;十进制的基数为10。 • 位权:数制中某一位上的1所表示数值的大小(所处位置的价值)。例如,十进制的123,1的位权是100,2的位权是10,3的位权是1。
二进制、数制及其相互转换 • (一)计算机中使用二进制数 • (二)进位计数制 • (三)二、八、十六进制数(非十进制数)转换为十进制数 • (四)十进制数转换为二、八、十六进制数(非十进制数) • (五)非十进制数间的转换 • (六)数制转换小结
(一)计算机中使用二进制数 • 1、认识各种数制的数 • 2、在计算机中为什么使用二进制数 • 3、为什么引入八进制数和十六进制数
2、在计算机中为什么使用二进制数 • 二进制的优点:使用电子器件表示两种物理状态容易实现,两种状态的系统稳定性高,二进制运算简单、硬件容易实现、存储和传送可靠等 • (1)可行性 二进制数只有0、1两个数码,采用电子器件很容易实现,而其它进制则很难实现。 • (2)可靠性 二进制的0、1两种状态,在传输和处理时不容易出错。 • (3)简易性 二进制的运算法规简单,这样,使得计算机的运算器结构大大简化,控制简单。 • (4)逻辑性 二进制的0、1两种状态,可以代表逻辑运算中的“假”和“真”两种值。
3、为什么引入八进制数和十六进制数 • 二进制数书写冗长、易错、难记,而十进制数与二进制数之间的转换过程复杂,所以一般用十六进制数或八进制数作为二进制数的缩写。
(二)进位计数制 • 按进位的原则进行的计数方法称为进位计数制。
对于不同的数制,它们的共同特点是: • (1)每一种数制都有固定的符号集:如十进制数制,其符号有十个:0,1,2,,9,二进制数制,其符号有两个:0和1。 • (2)其次都是用位置表示法:即处于不同位置的数符所代表的值不同,与它所在位置的权值有关。
例如:十进制可表示为: • 5555.555 = 5 103 + 5 102 + 5 101 + 5 100 + 5 10-1 + 5 10-2 + 5 10-3 • 可以看出,各种进位计数制中的权的值恰好是基数的某次幂。因此,对任何一种进位计数制表示的数都可以写出按其权展开的多项式之和,任意一个r进制数N可表示为:
在微机中,常用的是二进制、八进制和十六进制。其中,二进制用得最为广泛。在微机中,常用的是二进制、八进制和十六进制。其中,二进制用得最为广泛。 • 下表所示的是计算机中常用的几种进位数制。
(三)二、八、十六进制数(非十进制数)转换为十进制数(三)二、八、十六进制数(非十进制数)转换为十进制数 • (1)(100110)2( )10 • (100110)2 = 1 25 + 1 22 + 1 21 = (38)10 • (2)(5675)8( )10 • (5675)8 = 5 83 + 6 82 + 7 81 + 5 80 = 2560 + 384 + 56 + 5 = (3005)10
(3)(3B)16( )10 • (3B)16 = 3 161 + 11 160 = 48 + 11 = (59)10 • (4)(1011.11)2( )10 • (1011.11)2 =1 24-1+0 23-1+ 1 22-1+1 20+1 2-1+1 2-2=11.75
课堂练习: • 1、(101110)2 ( )10 • (101110)2 = 1 26-1 + 0 25-1 + 1 24-1 + 1 23-1 + 1 22-1 +0 20 • = 32 + 8 + 4 + 1 • = (45)10 • 2、(10101011.101)2 = ( )10 • (10101011.101)2 = (171.625)10
(四)十进制数转换为二进制数 • 例:(25.3125)10 ( )2 • 整数部分和小数部分的转换方法不同 • (1)整数部分的转换(除基取余法) • (25)10 ( )2 • (25)10 = (11001)2 • 先余为低,后余为高
(2)小数部分的转换(乘基取整法) • (0.3125)10 ( )2 • (0.3125)10 = (0.0101)2 • 先取整为高,后取整为低 • 综上所述: • (25.3125)10 = (11001)2 + (0.0101)2 = (11001.0101)2
课堂练习: • (29.625)10 ( )8 • (29)10 = (35)8 • (0.625)10 = (0.5)8 • (29.625)10 = (35)8 + (0.5)8 = (35.5)8
(五)非十进制数间的转换 • (1)二进制数与八进制数间的转换 • (2)二进制数与十六进制数间的转换 • (3)八进制数与十六进制数间的转换
(1)二进制数与八进制数间的转换 • ∵ 81 = 23 • ∴ 1位八进制数 相当于 3位二进制数,即: • N2 = B8B7B6 B5B4B3 B2B1B0 • • N8 = O2 O1 O0
例:(10100101.01011101)2 ( )8 • 解:由于八进制的1位数相当于二进制的3位数,所以只要将二进制数从小数点开始,整数部分从右向左每3位数一组,小数部分从左向右每3位数一组,最后不足3位补零(无论向左还是向右)。 • 010 100 101.010 111 010 二进制数 • 2 4 5 . 2 7 2 八进制数 • 答:(10100101.01011101)2 = (245.272)8
例:(302.54)8 ( )2 • 解: • 3 0 2 . 5 4 八进制数 • 011 000 010.101 100 二进制数 • 答:(302.54)8 = (11000010.1011)2
(2)二进制数与十六进制数间的转换 • ∵ 161 = 24 • ∴ 1位十六进制数 相当于 4位二进制数,即: • N2 = B7B6B5 B4 B3B2B1B0 • • N16 = H1 H0
例:(1111111000111.100101011)2 ( )16 • 解: • 0001 1111 1100 0111.1001 0101 1000 • 1 F C 7 . 9 5 8 • 答:(1111111000111.100101011)2 = (1FC7.958)16
例:(3C.A6)16 ( )2 • 解: • 3 C . A 6 十六进制数 • 0011 1100.1010 0110 二进制数 • 答:(3C.A6)16 = (111100.1010011)2
(3)八进制数与十六进制数间的转换 • (1)八进制数十进制数十六进制数 • 或:(2)八进制数二进制数十六进制数(简单)
(六)数制转换小结 • 数制转换小结
作 业 • (一)在计算机中为什么采用二进制? • (二)在计算机中为什么引入八进制和十六进制? • (三)(57.25)10 = ( )2 = ( )8 = ( )16 • (四)(10101011.101)2 = ( )10 = ( )8 = ( )16 • (五)(157.34)8 = ( )2 = ( )16 = ( )10 • (六)(2CE.D8)16 = ( )2 = ( )8 = ( )10
计算机编码 • 原码 • 反码 • 补码 • BCD码
一、字节和位 • 计算机系统的内存储器是由许多被称为“字节”(byte)的单元组成的。每一个字节有一个地址。一个字节由若干个二进制位(bit)组成。若干个字节组成一个存储单元,称为“字”(word)。每一个存储单元存放一个数据或一条指令。 • 一个字节由8个二进制位(bit)组成。其中最右边的一位称为“最低有效位”或“最低位”(least significant bit),最左边的一位称为“最高有效位”或“最高位”(most significant bit)。每一个二进制位的值是0或1。
例如:在C++中,以4个字节存放一个int型整数,其最左边的一位(最高位)用作数的符号位。例如:在C++中,以4个字节存放一个int型整数,其最左边的一位(最高位)用作数的符号位。 • 为了表示数值,可以采用不同的方法,一般有:原码、反码和补码。
二、原码 • 只将最高位作符号位(以0代表正,1代表负),其余各位代表数值本身的绝对值(以二进制表示)。如: • +7 的原码为:00000111 • -7 的原码为:10000111 • 我们只用一个字节存放一个整数,如果用两个字节存放一个整数,情况是一样的,无非把+7表示成00000000 00000111而已。
+0 的原码为:00000000 • -0 的原码为:10000000 • 显然,+0和-0表示的是同一个数0,而在内存中却有两个不同的表示。也就是说,0的表示不是唯一的,这不适合于计算机的运算。
三、反码 • 一个数如果值为正,则它的反码与原码相同。如:+7的反码为00000111。 • 一个数如果值为负,则符号位为1,其余各位是对原码取反。如: • -7 的反码为11111000 • +0 的反码为00000000 • -0 的反码为11111111 • 同样,0的表示是不唯一的。用反码表示的最大值为+127,最小值为-127。
+127 的反码为01111111 • -127 的反码为10000000 • 用反码表示数,现已不多用。
四、补码 • 原码和反码都不便于计算机内的运算,因为在运算中要单独处理其符号。例如,对以原码表示的+7和-7相加,必须先判断各自的符号位,然后对后7位进行相应的处理,很不方便。 • 因此,最好能做到将符号位和其它位统一处理。对减法也按加法来处理。这就是“补码”。
举例(十进制数) • 对十进制数,如果想从9得到结果值5,可以用减法: • 9 – 4 = 5 • 已知4的补数为10 – 4 = 6,即4与6互补。因此9 – 4可以改写为加法: • 9 + 6 = 15 • 在去掉高位1,得5。
在计算机中,以一个有限长度的二进制位作为数的模,如果用1个字节表示一个数,一个字节为8位,模为28。因为逢28就进一,在内存中情况为:在计算机中,以一个有限长度的二进制位作为数的模,如果用1个字节表示一个数,一个字节为8位,模为28。因为逢28就进一,在内存中情况为: • 1 00000000 • 进位被丢弃。 • 补码是这样规定的: • 正数:其原码、反码、补码相同。例如,+7的补码也是00000111。 • 负数:最高位为1,其余各位为原码的相应位取反,然后对整个数加1。
负数:最高位为1,其余各位为原码的相应位取反,然后对整个数加1。例如:负数:最高位为1,其余各位为原码的相应位取反,然后对整个数加1。例如: • -7 的原码: 10000111 • -7 的补码:第①步 11111000(最高位不变,对其余各位取反。) • 第②步 +1 • 结果 11111001 • 即对+7各位取反加1。 • 数值原码反码补码
由负数的补码求其原码,只须按由负数的原码求其补码的逆过程去做即可。由负数的补码求其原码,只须按由负数的原码求其补码的逆过程去做即可。 • 也可以这样:补码中的最高位不改变,其余各位取反加1,这就得到原码。如:11111001,先变成10000110,再加1得10000111,它是-7的原码。 • +0的补码表示为: 00000000 • -0的补码也是: 00000000 • -0的补码是这样求出的: • ①最高位为1,其余各位为原码取反,即对0000000求反得11111111; • ②加1,得100000000,进位1被丢弃(因为一个字节只能容纳8位,28只能被存储为00000000),因此-0的补码也是00000000。 • 可知,+0和-0的补码表示是相同的。或者说0的补码是唯一的。 • 规定:补码1000000表示数值-128。
BCD码 BCD码是二进制编码的十进制数(Binary Coded Decimal)的简写。有四位 BCD码、六位BCD码和扩展的BCD码三种。 • 1、8421BCD码 • 8421BCD码曾被广泛使用,它用四位二进制数表示一个十进制数字,四位二进制数从左向右其权分别为8、4.2、1。为了对一个多位十进制数进行编码,需要有和十进制数的位数一样多的四位组。显然,842lBCD只能表示十进制数的0-9十个字符。
2、扩展BCD码 • 8421BCD码只能表示十个十进制数,自然字符数太少。即使后来产生的六位BCD码也只能表示64个字符,其中包括十个十进制数,26个英文字母和28个特殊字符。而在某些场合,还需要区分大、小写英文字母。扩展BCD码(Extended Binary Coded Decimal Interchange Code)缩写为EBCDIC,它由8位组成,可表示28 = 256个符号。EBCDIC码就是为此提出的。 • EBCDIC码是常用的编码之一,IBM及UNIVAC计算机系统均采用这种编码。
非数值数据的表示 • 1、字符数据的表示 • ASCII码(America Standard Code for Information Interchage)是美国标准信息交换码,被国际化组织指定为国际标准,分为7位和8位两种版本。 • 国际通用的是7位ASCII码,它已对大、小写英文字母、阿拉伯数字、标点符号及控制符等特殊符号编码,共128个字符。