c++中的进制转换是学c++的基础,但对于一个初学者来说,进制转换是比较烦人的东西。由于本人也被进制转换祸害过,所以本人在这里对进制转换(2,8,10,16)进行一个整理。
整数部分:
这里整理的是整数部分的进制转换。
10进制转2、8、16进制:
这里我们可以使用一个短除法:
先举一个例子,50,下面是用短除法来解决:
2|50 0
2|25 1
2|12 0
2|6 0
2|3 1
2|1 1
0
最后从下往上将余数写出来:
50(10)=110010(2)
至于十进制转8、16进制都是一样的,只不过16进制有些要用字母(见下表):
十进制 | 10 | 11 | 12 | 13 | 14 | 15 |
十六进制 | A | B | C | D | E | F |
2、8、16进制转10进制:
这里我也不多讲了,直接解题。
例子:二进制110010转为十进制:
先来看一个表:
二进制数位数 | 对应的次方 | 相应的数值 |
1 | 2的0次方 | 1 |
2 | 2的1次方 | 2 |
3 | 2的2次方 | 4 |
4 | 2的3次方 | 8 |
5 | 2的4次方 | 16 |
6 | 2的5次方 | 32 |
7 | 2的6次方 | 64 |
8 | 2的7次方 | 128 |
9 | 2的8次方 | 256 |
10 | 2的9次方 | 512 |
11 | 2的10次方 | 1024 |
对着这个表,我们就可以开始了,看好我的操作:
0*1+1*2+0*4+0*8+1*16+1*32=50
这就是求的方法。
这个算式也可以简化成这样:
1*2+1*16+1*32=50
但无论如何,我们还是求出来了。
至于8、16进制转10进制,其实也是差不多的,只是把2的n次方变成8或16的n次方。
2进制转8、16进制:
这个其实也不难,只要记住两个表并掌握方法。先来两个表吧:
二进制数 | 八进制数 |
000 | 0 |
001 | 1 |
010 | 2 |
011 | 3 |
100 | 4 |
101 | 5 |
110 | 6 |
111 | 7 |
二进制数 | 十六进制数 |
0000 | 0 |
0001 | 1 |
0010 | 2 |
0011 | 3 |
0100 | 4 |
0101 | 5 |
0110 | 6 |
0111 | 7 |
1000 | 8 |
1001 | 9 |
1010 | A |
1011 | B |
1100 | C |
1101 | D |
1110 | E |
1111 | F |
看着表格,我们就可以做了。先来尝试一题2进制转8进制吧:
110010010(2)=?(8)
首先,我们要对2进制数进行从后往前划分,三数一划:
110|010|010
//这个数刚好是9位,如果位数不是3的倍数,我们要在前面补零,如:
//11110000010变成011|110|000|010
划完后,我们按表划分:
110|010|010
6 2 2
得出答案:110010010(2)=622(8)
2进制转16进制就不多说了,就是3位划分变为4位划分。
至于表格有没有什么规律,你就自己去寻找吧!!!!![坏笑][坏笑]
2进制转8、16进制:
这个我也不多说了,根据表来还原就好了。
好了,整数部分的进制转换就到这里了,小数部分的见下篇文章。