一)、数制 计算机中采用的是二进制,因为二进制具有运算简单,易实现且可靠,为逻辑设计提供了有利的途径、节省设备等优点,为了便于描述,又常用八、十六进制作为二进制的缩写。 一般计数都采用进位计数,其特点是: (1)逢N进一,N是每种进位计数制表示一位数所需要的符号数目为基数。 (2)采用位置表示法,处在不同位置的数字所代表的值不同,而在固定位置上单位数字表示的值是确定的,这个固定位上的值称为权。 在计算机中:D7 D6 D5 D4 D3 D2 D1 D0 只有两种0和1 8 4 2 1 二)、数制转换 不同进位计数制之间的转换原则:不同进位计数制之间的转换是根据两个有理数如相等,则两数的整数和分数部分一定分别相等的原则进行的。也就是说,若转换前两数相等,转换后仍必须相等。 有四进制 十进制:有10个基数:0 ~~ 9 ,逢十进一 二进制:有2 个基数:0 ~~ 1 ,逢二进一 八进制:有8个基数:0 ~~ 7 ,逢八进一 十六进制:有16个基数:0 ~~ 9,A,B,C,D,E,F (A=10,B=11,C=12,D=13,E=14,F=15) ,逢十六进一 1、数的进位记数法 N=a n-1*p n-1+a n-2*p n-2+…+a2*p2+a1*p1+a0*p0 2、十进制数与P进制数之间的转换 ①十进制转换成二进制:十进制整数转换成二进制整数通常采用除2取余法,小数部分乘2取整法。例如,将(30)10转换成二进制数。 将(30)10转换成二进制数 2| 30 ….0 ----最右位 2 15 ….1 2 7 ….1 2 3 ….1 1 ….1 ----最左位 ∴ (30)10=(11110)2 将(30)10转换成八、十六进制数 8| 30 ……6 ------最右位 3 ------最左位 ∴ (30)10 =(36)8 16| 30 …14(E)----最右位 1 ----最左位 ∴ (30)10 =(1E)16 3、将P进制数转换为十进制数 把一个二进制转换成十进制采用方法:把这个二进制的最后一位乘上20,倒数第二位乘上21,……,一直到最高位乘上2n,然后将各项乘积相加的结果就它的十进制表达式。 把二进制11110转换为十进制 (11110)2=1*24+1*23+1*22+1*21+0*20= =16+8+4+2+0 =(30)10 把一个八进制转换成十进制采用方法:把这个八进制的最后一位乘上80,倒数第二位乘上81,……,一直到最高位乘上8n,然后将各项乘积相加的结果就它的十进制表达式。 把八进制36转换为十进制 (36)8=3*81+6*80=24+6=(30)10 把一个十六进制转换成十进制采用方法:把这个十六进制的最后一位乘上160,倒数第二位乘上161,……,一直到最高位乘上16n,然后将各项乘积相加的结果就它的十进制表达式。 把十六制1E转换为十进制 (1E)16=1*161+14*160=16+14=(30)10 3、二进制转换成八进制数 (1)二进制数转换成八进制数:对于整数,从低位到高位将二进制数的每三位分为一组,若不够三位时,在高位左面添0,补足三位,然后将每三位二进制数用一位八进制数替换,小数部分从小数点开始,自左向右每三位一组进行转换即可完成。例如: 将二进制数1101001转换成八进制数,则 (001 101 001)2 | | | ( 1 5 1)8 ( 1101001)2=(151)8 (2)八进制数转换成二进制数:只要将每位八进制数用三位二进制数替换,即可完成转换,例如,把八进制数(643.503)8,转换成二进制数,则 (6 4 3 . 5 0 3)8 | | | | | | (110 100 011 . 101 000 011)2 (643.503)8=(110100011.101000011)2 4、二进制与十六进制之间的转换 (1)二进制数转换成十六进制数:由于2的4次方=16,所以依照二进制与八进制的转换方法,将二进制数的每四位用一个十六进制数码来表示,整数部分以小数点为界点从右往左每四位一组转换,小数部分从小数点开始自左向右每四位一组进行转换。 (2)十六进制转换成二进制数 如将十六进制数转换成二进制数,只要将每一位十六进制数用四位相应的二进制数表示,即可完成转换。 例如:将(163.5B)16转换成二进制数,则 ( 1 6 3 . 5 B )16 | | | | | (0001 0110 0011. 0101 1011 )2 (163.5B)16=(101100011.01011011)2 计算机中常用的数的进制主要有:二进制、八进制、十六进制,学习计算机要对其有所了解。 2进制,用两个阿拉伯数字:0、1; 8进制,用八个阿拉伯数字:0、1、2、3、4、5、6、7; 10进制,用十个阿拉伯数字:0到9; 16进制就是逢16进1,但我们只有0~9这十个数字,所以我们用A,B,C,D,E,F这五个字母来分别表示10,11,12,13,14,15。字母不区分大小写。 以下简介各种进制之间的转换方法: 一、二进制转换十进制 例:二进制 “1101100” 1101100 ←二进制数 6543210 ←排位方法 例如二进制换算十进制的算法: 1*26 + 1*25 + 0*24 + 1*23 + 1* 22 + 0*21 + 0*20 ↑ ↑ 说明:2代表进制,后面的数是次方(从右往左数,以0开始) =64+32+0+8+4+0+0 =108 二、二进制换算八进制 例:二进制的“10110111011” 换八进制时,从右到左,三位一组,不够补0,即成了: 010 110 111 011 然后每组中的3个数分别对应4、2、1的状态,然后将为状态为1的相加,如: 010 = 2 110 = 4+2 = 6 111 = 4+2+1 = 7 011 = 2+1 = 3 结果为:2673 三、二进制转换十六进制 十六进制换二进制的方法也类似,只要每组4位,分别对应8、4、2、1就行了,如分解为: 0101 1011 1011 运算为: 0101 = 4+1 = 5 1011 = 8+2+1 = 11(由于10为A,所以11即B) 1011 = 8+2+1 = 11(由于10为A,所以11即B) 结果为:5BB 四、二进制数转换为十进制数 二进制数第0位的权值是2的0次方,第1位的权值是2的1次方…… 所以,设有一个二进制数:0110 0100,转换为10进制为: 计算: 0 * 20 + 0 * 21 + 1 * 22 + 1 * 23 + 0 * 24 + 1 * 25 + 1 * 26 + 0 * 27 = 100 五、八进制数转换为十进制数 八进制就是逢8进1。 八进制数采用 0~7这八数来表达一个数。 八进制数第0位的权值为8的0次方,第1位权值为8的1次方,第2位权值为8的2次方…… 所以,设有一个八进制数:1507,转换为十进制为: 计算: 7 * 80 + 0 * 81 + 5 * 82 + 1 * 83 = 839 结果是,八进制数 1507 转换成十进制数为 839 六、十六进制转换十进制 例:2AF5换算成10进制 直接计算就是: 5 * 160 + F * 161 + A * 162 + 2 * 163 = 10997 (别忘了,在上面的计算中,A表示10,而F表示15)、 现在可以看出,所有进制换算成10进制,关键在于各自的权值不同。 假设有人问你,十进数 1234 为什么是 一千二百三十四?你尽可以给他这么一个算式: 1234 = 1 * 103 + 2 * 102 + 3 * 101 + 4 * 100 *进位计数制的基本概念    将数字符号按序排列成数位,并遵照某种由低位到高位的进位 方式计数表示数值的方法,称作进位计数制。 1. 十进制   十进制计数制由 0、 1、 2、 3、 4、 5、 6、 7、 8、 9共 10个数字符号组成。相同数字符号在不同的数位上表示不同的数值,每个数位计满十就向高位进一,即 “逢十进一 ”。   如: 555.5可以表示成   555.5= 5×100+5×10+5×1+5×( 1/10)   一个任意的十进制数都可以表示成:    2. 八进制   八进制计数制由 0、 1、 2、 3、 4、 5、 6、 7共 8个数字符号组成。相同数字符号在不同的数位上表示不同的数值,每个数位计满八就向高位进一,即 “逢八进一 ”。   如:( 555.5) 8 可以表示成   ( 555.5) 8 = 5×16+5×8+5×1+5×( 1/8)   一个任意的十进制数都可以表示成:    3. 二进制   二进制计数制由 0和 1共 2个数字符号组成。相同数字符号在不同的数位上表示不同的数值,每个数位计满二就向高位进一,即 “逢二进一 ”。   如:( 1011.1) 2 = 1×8+0×4+1×2+1×1+1×( 1/2)   一个任意的二进制数都可以表示成:    4. 其他进制   在日常生活和日常工作中还会使用其他进制数。如:十二进制数、十六进制数、百进制数和千进制数等。无论哪种进制数,表示的方法都是类似的。如:十六进制数由 0、 1、 2、 3、 4、 5、 6、 7、 8、 9、 A、 B、 C、 D、 E和 F共十六个符号组成, “逢十六进一 ”。不同的是用 A、 B、 C、 D、 E和 F分别表示 10、 11、 12、 13、 14和 15六个数字符号。 5. 基数与权   某进制计数制允许选用的基本数字符号的个数称为基数。一般而言, J进制数的基数为 J,可供选用的基本数字符号有 J个,分别为 0到 J- 1,每个数位计满 J就向高位进一,即 “逢 J进一 ”。   某进制计数制中各位数字符号所表示的数值表示该数字符号值乘以一个与数字符号有关的常数,该常数称为 “位权 ”(简称 “权 ”)。位权的大小是以基数为底,数字符号所处的位置的序号为指数的整数次幂。   十进制数允许使用十个基本数字符号,所以基数为 10,每位数字符号代表的位数的大小是以 10为底,数字符号所处位置的序号为指数的整数次幂。    为了表达方便起见,常在数字后加一缩写字母后缀作为不同进制数的标识。各种进制数的后缀字母分别为:   B :二进制数。   Q :八进制数。   D :十进制数。   H :十六进制数。    对于十进制数通常不加后缀,也即十进制数后的字母 D 可省略。 ( 1 )将二进制数转换成对应的十进制数    将二进制数转换成对应的十进制数的方法是“按权展开求和”:    利用二进制数按权展开的多项式之和的表达式,取基数为 2 ,逐项相加,其和就是对应的十进制数。    例 1 :将二进制数 1011.1 转换成对应的十进制    解: 1011.1B=1×2 3+0×2 2+1×2 1+1×2 0+1×2 -1   =8+0+2+1+0.5   =11.5D   例2:     ( 2 )将十进制数转换成对应的二进制数    将十进制数转换为对应的二进制数的方法是:    对于整数部分,用被除数反复除以 2 ,除第一次外,每次除以 2 均取前一次商的整数部分作被除数并依次记下每次的余数。另外,所得到的商的最后一位余数是所求二进制数的最高位。    对于小数部分,采用连续乘以基数 2 ,并依次取出的整数部分,直至结果的小数部分为 0 为止。故该法称 “ 乘基取整法 ” 。 例:将十进制 117.625D 转换成二进制数 解:整数部分: “除以 2 取余,逆序输出”      小数部分 : “乘以 2 取整,顺序输出”      所以 117.625D = 1110101.101B 例2: 例3: 特别提示:将十进制数转换成其他进制数方法与次上述方法类似。 ( 3 )将二进制数转换为对应的八进制数    由于 1 位八进制数对应 3 位二进制数,所以二进制数转换成八进制数时,只要以小数点为界,整数部分向左,小数部分向右每 3 位分成一组,各组用对应的 1 位八进制数字表示,即可得到对应的八进制数值。最左最右端分组不足 3 位时,可用 0 补足。 例:将 1101101.10101B 转换成对应的八进制数。 解:       所以, 1101101.10101B = 155.52Q 。    同理,用相反的方法可以将八进制数转换成对应的二进制数。 ( 4 )将二进制数转为对应的十六进制数    由于 1 位十六进制数对应 4 位二进制数,所以二进制数转换为十六进制时,只要以小数点为界,整数部分向左,小数部分向右每 4 位分成一组,各组用对应的 1 位十六进制数字表示,即可得到对应的十六进制数值。两端的分组不足 4 位时,用 0 补足。 例:将 1101101.10101B 转换成对应的十六进制数 解:       所以 1101101.10101B = 6D.8AH 。    同理,用相反的方法可以将十六进制数转换成对应的二进制数。 例:将十六进制数 5DF.9 转换成二进制: 例:将二进制数 1100001.111 转换成十六进制:    至于其他的转换方法,如八进制到十进制,十六进制到十进制之间的转换,同样可用按权展开的多项式之和及整数部分用 “ 除基取整数 ” 来实现的。只不过此时基数分别为 8 和 16 。当然,更简单实用的方法是借用二进制数做桥梁,用 “ 八 —— 二 —— 十 ” 或 “ 十六 —— 二 —— 八 ” 的转换方法来实现。