进制转换

来源:互联网 发布:求质数和的算法 编辑:程序博客网 时间:2024/05/01 15:23

原帖:http://club.it.sohu.com/read_art_sub.new.php?b=program&a=87791&NoCache=1

 

进 制 转 换

一、十进制与二进制之间的转换
1、十进制转换为二进制
(1)整数部分
方法1(除2取余法):每次 将整数部分除以2,余数为该位权上的数,而商继续除以2,余数又为上一个位权上的数,这个步骤一直持续下去,直到商为0为止,最后读数时候,从最后一个余 数读起,一直到最前面的一个余数。
举例:将十进制的168转换为二进制
第一步,将168除以2,商84,余数为0。
第二步,将商 84除以2,商42余数为0。
第三步,将商42除以2,商21余数为0。
第四步,将商21除以2,商10余数为1。
第五步,将商 10除以2,商5余数为0。
第六步,将商5除以2,商2余数为1。
第七步,将商2除以2,商1余数为0。
第八步,将商1除以2, 商0余数为1。
第九步,读数,因为最后一位是经过多次除以2才得到的,因此它是最高位,读数字从最后的余数向前读,得结果 (10101000)2。
(2) 小数部分(方法:乘2取整法)
将小数部分乘以2,然后取整数部分,剩下的小数部分继续乘以2,然后取整 数部分,剩下的小数部分又乘以2,一直取到小数部分为零为止。如果永远不能为零,就同十进制数的四舍五入一样,按照要求保留多少位小数时,就根据后面一位 是0还是1,取舍,如果是零,舍掉,如果是1,向入一位。换句话说就是0舍1入。读数要从前面的整数读到后面的整数,
下面举例:将0.45转换为 二进制(保留到小数点第四位)
0.45*2=0.9…0;
0.9*2=1.8…1;
0.8*2=1.6…1;
0.6*2=1.2…1;
0.2*2=0.4…0;
0.4*2=0.8…0;
0.8*2=1.6…1
……
大 家从上面步骤可以看出,当第五次做乘法时候,得到的结果是0.4,那么小数部分继续乘以2,得0.8,0.8又乘以2的,到1.6这样一直乘下去,最后不 可能得到小数部分为零,因此,这个时候只好学习十进制的方法进行四舍五入了,但是二进制只有0和1两个,于是就出现0舍1入。这个也是计算机在转换中会产 生误差,但是由于保留位数很多,精度很高,所以可以忽略不计。那么,我们可以得出结果将0.45转换为二进制约等于 (0.0111)2。
注:整 数的转换是精确的,小数的转换可能出现无穷小数或循环小数的情况。此时需要进行舍入处理以截断,所以小数的转换可能略有偏差。
(3)整数与小数
举 例:将168.45转换成二进制
(168.45)=(10101000.0111)
上面介绍的方法是十进制转换为为二进制的方法,需要大 家注意的是:
①进制转换为二进制,要分成整数和小数两个部分分别转换;
② 当转换整数时,用的除2取余法,而转换小数时候,用的是乘2取 整法;
③ 注意他们的读数方向。
2、二进制转换成十进制
二进制转换为十进制不分整数和小数部分
方法(按权相加法):将二 进制每位上的数乘以权,然后相加之和即是十进制数。
例1:将二进制01100100转换为十进制
第0位 0 x 2^0 = 0
第1位 0 x 2^1 = 0
第2位 1 x 2^2 = 4
第3位 0 x 2^3 = 0
第4 位 0 x 2^4 = 0
第5位 1 x 2^5 = 32
第6位 1 x 2^6 = 64
第7 位 0 x 2^7 = 0
--------------------------
(0110 0100)2=(100)10
例 2:将二进制数(11001.101)2转换为十进制数
整数部分:1 *2^4+1*2^3+0*2^2+0*2^1+1*2^0
=16+8+0+0+1=25
小 数部分:1*2^-1+0*2^-2+1*2^-3
=(1/2)^1+(1/2)^2+(1/2)^3
= 0.5+0+0.125=0.625
得 结果:(11001.101)=(25.625)
大家在做二进制转换成十进制需要注意的是
①要知道二进制每位的权值;
② 要能求 出每位的值。
二、二进制与八进制之间的转换
首先,我们需要了解一个数学关系,即2^3=8,2^4=16,而八进制和十六进制是用这关系 衍生而来的,即用三位二进制表示一位八进制,用四位二进制表示一位十六进制数。接着,记住4个数字8、4、2、1(2^3=8、2^2=4、2^1=2、 2^0=1)。现在我们来练习二进制与八进制之间的转换。
1、二进制转换为八进制
方法(取三合一法):即从二进制的小数点为分界点,向左 (向右)每三位取成一位,接着将这三位二进制按权相加,得到的数就是一位八位二进制数,然后,按顺序进行排列,小数点的位置不变,得到的数字就是我们所求 的八进制数。如果向左(向右)取三位后,取到最高(最低)位时候,如果无法凑足三位,可以在小数点最左边(最右边),即整数的最高位(最低位)添0,凑足 三位。
例:将二进制数(11001.101)2转换为八进制
整数部分:
从后往前每三位一组,缺位处有0填补,然后按十进制方法进 行转化, 则有: 001=1、011=3 ,然后我们将结果按从下往上的顺序书写就是:31,那么这个31就是二进制11001的八进制形式
小 数部分:
从前往后每三位一组,缺位处有0填补,然后按十进制方法进行转化, 则有: 101=5 ,然后我们将结果部分按从上往下的顺序书写就 是:5,那么这个5就是二进制0.625的八进制形式
所以:(11001.101)2=(31.5)8
2、八进制转换为二进制
计 算八进制转换为二进制:首先,将八进制按照从左到右,每位展开为三位,小数点位置不变;然后,将每位上转换成二进制数按顺序排列;最后,就得到了八进制转 换成二进制的数字。
例:将八进制数(31.5)8转换为二进制数
整数部分:
从后往前每一位按十进制转化方式转化为三位二进制数, 缺位处用0补充 则有: 1---->1---->001;3---->011 ,然后我们将结果按从下往上的顺序书写就 是:11001,那么这个11001就是八进制31的二进制形式
小数部分:
从前往后每一位按十进制转化方式转化为三位二进制数,缺位处用 0补充 则有: 5---->101 ,然后我们将结果按从下往上的顺序书写就是:101,那么这个101就是八进制5的二进制形式
所以: (31.5)8=(11001.101)2
以上的方法就是二进制与八进制的互换,大家在做题的时候需要注意的是:
①他们之间的互换是以一 位与三位转换,这个有别于二进制与十进制转换
②大家在做添0和去0的时候要注意,是在小数点最左边或者小数点的最右边(即整数的最高位和小数的最 低位)才能添0或者去0,否则将产生错误
三、二进制与十六进制之间的转换
方法:与二进制与八进制转换相似,只不过是一位(十六)与四位 (二进制)的转换,下面具体讲解
1、 二进制转换为十六进制
方法(取四合一法):即从二进制的小数点为分界点,向左(向右)每四位取成一 位,接着将这四位二进制按权相加,得到的数就是一位十六位二进制数,然后,按顺序进行排列,小数点的位置不变,得到的数字就是我们所求的十六进制数。如果 向左(向右)取四位后,取到最高(最低)位时候,如果无法凑足四位,可以在小数点最左边(最右边),即整数的最高位(最低位)添0,凑足四位。
例 1:将二进制11101001.1011转换为十六进制
(1110,1001).(1011)=(14,9).(11)=E9.B
得到结 果:将二进制11101001.1011转换为十六进制为E9.B
例2:将101011.101转换为十六进制
(0010,1011). (1010)=(2,11).(12)=2B.A
因此得到结果:将二进制101011.101转换为十六进制为2B.A
2、将十六进制转 换为二进制
方法:取一分四法,即将一位十六进制数分解成四位二进制数,用四位二进制按权相加去凑这位十六进制数,小数点位置照旧。
例:将 十六进制6E.2转换为二进制数
6E.2=(0110,1110).(0010)=01101110.0010
因此得到结果:将十六进制 6E.2转换为二进制为01101110.0010即110110.001
四、八进制与十六进制的转换
1、 八进制转换为十六进制
方 法:一般不能互相直接转换,一般是将八进制(或十六进制)转换为二进制,然后再将二进制转换为十六进制(或八进制),小数点位置不变。那么相应的转换请参 照上面二进制与八进制的转换和二进制与十六进制的转换。
2、十六进制转换为八进制
(同上)
五、八进制与十进制的转换
1、 八进制转换为十进制
方法:按权相加法,即将八进制每位上的数乘以位权,然后相加之和即是十进制数。
例1:设有一个八进制数:1507,转 换为十进制为:
用竖式表示:
1507换算成十进制。
第0位 7 x 8^0 = 7
第1 位 0 x 8^1 = 0
第2位 5 x 8^2 = 320
第3位 1 x 8^3 = 512
--------------------------
(1507)O=(839)D
 用横式直接计算:
7*8^0 + 0*8^1 + 5*8^2 + 1*8^3 = (839)D
结果是,八进制数1507 转换成十进制数为 839
例 2:将八进制数67.35转换为十进制
(67.35)8=(6*8^1+7*8^0).(3*8^-1+5*8^-2)
= (48+7).(0.375+0.078125)=55.453125
结果是,八进制数67.35 转换成十进制数为 55.453125
2、 十进制转换为八进制
十进制转换成八进制有两种方法:
(1)间接法:先将十进制转换成二进制,然后将二进制又转换成八进制
(2)直 接法:前面我们讲过,八进制是由二进制衍生而来的,因此我们可以采用与十进制转换为二进制相类似的方法,还是整数部分的转换和小数部分的转换,下面来具体 讲解一下:
①整数部分
方法:除8取余法,即每次将整数部分除以8,余数为该位权上的数,而商继续除以8,余数又为上一个位权上的数,这个 步骤一直持续下去,直到商为0为止,最后读数时候,从最后一个余数起,一直到最前面的一个余数。
②小数部分
方法:乘8取整法,即将小数部 分乘以8,然后取整数部分,剩下的小数部分继续乘以8,然后取整数部分,剩下的小数部分又乘以8,一直取到小数部分为零为止。如果永远不能为零,就同十进 制数的四舍五入一样,暂取个名字叫3舍4入。
例1:将十进制数796.703125转换为八进制数
解:先将这个数字分为整数部分796和 小数部分0.703125
(1)整数部分796
第一步,将796除以8,商99,余数为4。
第二步,将商99除以8,商12余数 为3。
第三步,将商12除以8,商1余数为4。
第四步,将商1除以8,商0余数为1。
第五步,读数,因为最后一位是经过多次除以 8才得到的,因此它是最高位,读数字从最后的余数向前读,得结果(1434)8。
(2)小数部分(0.703125)
0.703125*8=5.625…5;
0.625*8=5…5
得 结果(0.55)8
因此,得到结果十进制796.703125转换八进制为1434.55
上面的方法大家可以验证一下,你可以先将十进制 转换,然后在转换为八进制,这样看得到的结果是否一样
六、十六进制与十进制的转换
1、十六进制转换为十进制
假设有一个十六进 数 2AF5, 那么如何换算成10进制呢?
用竖式计算:
2AF5换算成10进制:
第0位: 5 * 16^0 = 5
第 1位: F * 16^1 = 240
第2位: A * 16^2 = 2560
第3位: 2 * 16^3 = 8192 +
-------------------------------------
10997
直 接计算就是:
5 * 16^0 + F * 16^1 + A * 16^2 + 2 * 16^3 = 10997
(别忘了,在上面的 计算中,A表示10,而F表示15)
2、十进制转换为十六进制
10进制数转换成16进制的方法,和转换为2进制的方法类似,惟一变化:除 数由2变成16。就是大于15小于256的十进制数除以16为的值为十位的十六进制数,其余数为个位的十六进制数,没有余数则个位为“0”。
例: 将(61)10转换为十六进制。
61/16=3。。。13
“3”作十位数,13转成D为个位数,
得结果(61)10= (3D)16。
本文介绍了二进制、十进制、八进制、十六进制四种进制之间相互的转换,大家在转换的时候要注意转换的方法,以及步骤,特别是十进制 转换为期于三种进制之间,要分为整数部分和小数部分:其他进制转换到十进制,全部是各进制按权数的n-1次方展开并求和;十进制转换为其他进制,则是 “除 各进制数基数 取余法”,直至商为零,然后将所有余数从后向前排列。





进制转换附录

附 录一:常用进制
数 制 基 数 码 尾 标
十六进制 16 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 H(Hexadecimal)
十进 制 10 0.1.2.3.4.5.6.7.8.9 D(Decimal)
八进制 8 0.1.2.3.4.5.6.7 O(Octal)
二 进制 2 0.1 B(Binary)

附录二:各进制基数、符号及示例
十进制数制系统
十进制数制系统包括 10 个数 字:0、1、2、3、4、5、6、7、8、9
基为:10
逢十进一,如3+7=10,20+80=100
二进制数制系统
计 算机中使用二进制表示数据
二进制包括两个符号:0和1
二进制逢二进一:(1+1)2=(10)2
二进制的基为2
示 例:1000101100101101
二进制与遵循十进制数遵循一样的运算规则,但显得比十进制更简单。例如:
(1)加 法:0+0=0 0+1=1 1+0=1 1+1=0
(2)减法:0-0=0 1-1=01-0=1 0-1=1
(3)乘 法:0*0=0 0*1=01*0=0 1*1=1
(4)除法:0/1=0 1/1=1,除数不能为0
八进制数制系统
用于缩短二 进制的数字长度
八进制基是8,使用的符号为:0、1、2、3、4、5、6、7
逢八进一,即(7+1)8=(10)8
十六进制数制 系统
十六进制数制系统的基是 16
十进制:0、1、2、3、4、5、6、7、8、9、10、11、12、13、14、15
十六进 制:0、1、2、3、4、5、6、7、8、9、A、 B、 C、D、 E、 F
逢十六进一,如 (8+8)16=(10)16
示 例:12B、00FFFF
计算机中以数量表示色彩
各数制的权
各种数制中不同位的权为“基的n-1次方(n为所在的位数)”。
如:
十 进制中,各位的权为10n-1
二进制中,各位的权为2n-1
八进制中,各位的权为8n-1
十六进制中,各位的权为16n-1

附 录三:进制转换规律
十进制数 二进制数 八进制数 十六进制 一些对应规律
0 0 0 0 (20)10=(1)2

(21)10= (10)2

(22)10=(100)2

(2n)=(1…0)n 2



八进制的一个数字与 一个3位的二进制数对应。



十六进制的一个数字与一个4位的二进制数对应。
1(20) 1 1 1
2(21) 10 2 2
3 11 3 3
4(22) 100 4 4
5 101 5 5
6 110 6 6
7 111 7 7
8(23) 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
16(24) 10000 20 10
17 10001 21 11
32(25) 100000 40 20
64(26) 1000000 100 40
128(27) 10000000 200 80
256(28) 100000000 400 100
512(29) 1000000000 1000 200
1024(210) 10000000000(1K) 2000 400
220 (1M) 4000000 100000
230 (1G) 10000000000 40000000

附 录四:8421法
数制转换是一个非常重要的知识点,特别是二进制和十进制的转换。虽然有“按权相加”(二进制转换为十进制)和“除二取余法”(十 进制转换为二进制)二种方法。但这两种方法都太繁琐,上机考核根本不允许带纸和笔,这给解答这类题型造成了不小的麻烦。根据多年的经验,总结出了一个简单 快捷的方法,取名“8421”法:
根据二进制的原则“逢二进一”,我们把2的n次方列出分别是:
20=1  21=2  22=4   23=8 24=16 25=32  26=64……
“8421”法的原理说白了就是一种凑数法,按2的n次方的值列出,根据不同的情况进行 “凑数”。
一、对于二进制转换成十进制数
例如:二进制数1010转换成十进制数
 8  4  2  1
 二进制数: 1  0  1  0 (结果为凡是1对应的数相加:8+2=10)
例1:110转换成十进制数
 8   4  2  1
 1  1  0  (结果为凡是1对应的数相加:4+2=6)
例2:11100转换成十进制数
 16  8  4  2  1
 1  1  1  0  0  (结果为凡是1对应的数相加:16+8+4=28)
二、 对于十进制转换成二进制数
例如:十进制数不胜数10转换成二进制数
 8  4  2  1     (因为10=8+2)
  1  0  1  0 (故凡是凑到的8和2下面都是1,没有凑到的为0)
例3:十进制数6转换成二进制数
 8   4  2  1     (因为6=4+2)
 0  1  1  0 (故凡是凑到的4和2下面都是1,没有凑到的为0)
例 4:十进制数28转换成二进制数
  16 8  4  2  1      (因为16+4+8=28)
1  1  1   0  0   (凑到的为1,没有凑到的为0)
当然,这种方法对数值比较小的数要容易的多,但对于一般的考试已经是足以应付了。另外,也可以采 用Windows下附件里的计算器,把查看菜单选为“科学型”。这样,不管是多么复杂的数值转换都是易如反掌了。

附录五:数字的负次方
首 先,2的2次方×2的3次方=2的(2+3)次方=2的5次方
这个我相信你应该学过
那么,扩展下去:2的2次方×2的-2次方=2的 (2-2)次方=2的0次方=1。
任何非0数的0次方都是1,这个我不知道你有没有学过,如果没学过,那今天我教过你了
一个非零数x,它 的倒数就是1/x,一个非零数跟它的倒数的乘积是1,也就是说x•1/x=1
那么,既然 2的2次方×2的-2次方=1,也就是说:2的-2次方 是2的2次方的倒数,2的-n次方也就是2的n次方的倒数。同样的道理,任意非0数字a的-n次方都是a的n次方的倒数。因此我们可以得到:
a的 -n次方=1/a的n次方 (a为任意非0的数)
如果看懂了,自己算出你问的那几个数,跟5楼的大魔法师对一下标准答案。都对了的话,下面给你解 释数字的分数次方.
要知道,(2的2次方)的3次方=2的(2×3)次方=2的6次方
那么,(2的1/2次方)的2次方=2的(1 /2×2)次方=2的1次方=2
一个数的平方等于2,那么这个数是根号2(或负根号2)
但是,一个正数的任意次方一定是正数,所以 2的 1/2次方=根号2
同样的道理,(2的1/3次方)的3次方=2的(1/3×3)次方=2的1次方=3
一个数的三次方等于2,那么这个数 是3次根号2
也就是说 2的1/3次方=3次根号2
推而广之, a的1/n次方=n次根号a

附录六:负数的问题
将 -617 用 八进制和十六进制(补码)表示:
答案: (-617)10=(176627)8=(fd97)16
原理:任何数在内存中都是以二进制补码 的形式存放的.
正数的补码就是其本身的二进制.
负数的补码是其绝对值的二进制的反码加+1.
1:-617的绝对值:617
其 二进制0000001001101001(整型16位)
2: 反码 :1111 1101 1001 0110.
3:加1 后 :1111 1101 1001 0111.
转8进制,3位一体:
即:001 111 110 110 010 111
1 7 6 6 2 7
转 16进制,4位一体:
即:1111 1101 1001 0111
F D 9 7
1、权位
十进制权位
12345=1*104+2*103+3*102+4*101+5*100
↓ ↓ ↓ ↓ ↓
10000 1000 100 10 1 ← 权位
二进制权位
10010=1*24+0*23+0*22+1*21+0*20
↓ ↓ ↓ ↓ ↓
16 8 4 2 1 ← 权位
小数点之后是负指数:2-1、2-2…
小数点标记只是“个位”(20)的位置。

原创粉丝点击