求二、八、十、十六进制的转换算法

最好是能例题细说下 本人初学VisualC++里面有提到 以前的忘了 希望朋友教下

一般说来,如果数制只采用R个基本符号,则称为基R数值,R称为数制的基数,而数制中每一固定位置对应的单位值称为权。
进制 基数R 基本符号
二进制 2 0,1
八进制 8 0,1,2,3,4,5,6,7
十进制 10 0,1,2,3,4,5,6,7,8,9
十六进制 16 0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F(A—F对应十进制数的10—15)

1、R进制转换为十进制
基数为R的数字,只要将各位数字与它的权相乘,其积相加,和数就是十进制数
例:
3506.2 (8进制)
=3×83+5×82+0×81+6×80+2×8-1
=1862.25
例:
0.2A (16进制)
=2×16-1+10×16-2
=0.1640625

2、十进制转换为R进制
+进制整数转换成R进制的整数: 除R取余(余数部分),得到的余数反着看。
例:将123(10)转换成二进制数
123/2 =61......1 1
61/2 =30......1 1
30/2=15......0 0
15/2=7......1 1
7/2=3......1 1
3/2=1......1 1
1/2=0......1 1
1101111反着看,就是1111011
所以123(10)=1111011(2)

十进制小数转换成R进制时: 乘R取整(整数部分),如果整数变成1了,取了1后,再变成0,继续往下乘,得到的整数正着看。
例:将0.3125(10)转换成二进制数
0.3125×2 =0.625 0
0.625×2 =1.25 1
0.25×2=0.5 0
0.5×2 =1.0 1
所以0.3125(10)=0.0101(2)

3、二、八、十六进制的相互转换
每位八进制数相当于三位二进制数,每位十六进制数相当于四位二进制数。
在转换时,位组划分是以小数点为中心向左右两边延伸,中间的0不能省略,两头不够时可以补0。尤其是小数后末尾的0。
例如:
将1011010.1(2)转换成八进制和十六进制数
001 011 010. 100 1011010.1(2)=132.4(8)
1 3 2 . 4
0101 1010. 1000 1011010.1(2)=5A.8(16)
5 A . 8
将十六进制数F7.28变为二进制数
F 7 . 2 8 F7.28(16)=11110111.00101(2)
1111 0111.0010 1000
希望我的回答能帮到你。有不懂的地方再问哦
温馨提示:答案为网友推荐,仅供参考
第1个回答  2013-07-11
变10:举例:1111 1*2的3次方+1*2的2次方+1*2的1次方+1*2的0次方=15
2变8:1111:从右向左数,每三位隔一个逗号,最左面不足三位在他的左面补0.然后每三位按十进制方法转换
001,111=1*2的0次方,1*2的2次方+1*2的1次方+1*2的0次方
再把逗号去掉,就是8进制数,为17
2变16:与上方法相同,不过要每隔4位点一个逗号.还有就是16制的10--15表示方法为A,B,C,D,E,F本回答被网友采纳
相似回答