二进制、八进制、十进制、十六进制之间的转换
十六进制与八进制之间的转换
2进制和16进制转换技巧。
不过这二者的转换却不用计算,每个C,C++程序员都能做到看见二进制数,直接就能转换为十六进制数,反之亦然。
我们也一样,只要学完这一小节,就能做到。
首先我们来看一个二进制数:1111,它是多少呢?
你可能还要这样计算:1 * 2^0 + 1 * 2^1 + 1 * 2^2 + 1 * 2^3 = 1 * 1 + 1 * 2 + 1 * 4 + 1 * 8 = 15。
然而,由于1111才4位,所以我们必须直接记住它每一位的权值,并且是从高位往低位记,:8、4、2、1。即,最高位的权值为2^3 = 8,然后依次是 2^2 = 4,2^1=2, 2^0 = 1。
记住8421,对于任意一个4位的二进制数,我们都可以很快算出它对应的10进制值。
下面列出四位二进制数 xxxx 所有可能的值(中间略过部分)
仅4位的2进制数 快速计算方法 十进制值 十六进值
1111 = 8 + 4 + 2 + 1 = 15 F
1110 = 8 + 4 + 2 + 0 = 14 E
1101 = 8 + 4 + 0 + 1 = 13 D
1100 = 8 + 4 + 0 + 0 = 12 C
1011 = 8 + 4 + 0 + 1 = 11 B
1010 = 8 + 0 + 2 + 0 = 10 A
1001 = 8 + 0 + 0 + 1 = 10 9
....
0001 = 0 + 0 + 0 + 1 = 1 1
0000 = 0 + 0 + 0 + 0 = 0 0
二进制数要转换为十六进制,就是以4位一段,分别转换为十六进制。
如(上行为二制数,下面为对应的十六进制):
1111 1101 , 1010 0101 , 1001 1011
F D , A 5 , 9 B
反过来,当我们看到 FD时,如何迅速将它转换为二进制数呢?
先转换F:
看到F,我们需知道它是15(可能你还不熟悉A~F这五个数),然后15如何用8421凑呢?应该是8 + 4 + 2 + 1,所以四位全为1 :1111。
接着转换 D:
看到D,知道它是13,13如何用8421凑呢?应该是:8 + 2 + 1,即:1011。
所以,FD转换为二进制数,为: 1111 1011
由于十六进制转换成二进制相当直接,所以,我们需要将一个十进制数转换成2进制数时,也可以先转换成16进制,然后再转换成2进制。
10进制小数和2进制小数转换
整数部分从低位至高位1,2,4,8,16,32......
小数部分从小数点位置开始:1/2,1/4,1/8,1/16....
即:1010.1011=8+2+1/2+1/8+1/16
(“^”代表幂)
1101.0111=1*2^3+1*2^2+0*2^1+1*2^0+0*2^(-1)+1*2^(-2)+1*2^(-3)+1*2^(-4)
小数部分是如果小数点后第一位为1的话就加上0.5(即1/2),第二位加上0.25(1/4),第三位加上0.125(1/8),接着就是1/16,1/32,1/64.....。无论算出多少都是正确的。你也可以后过来算,你算了十进制数后,就拿小数部分*2,
如7/16=0.4375
0.4375*2=0.875 整数部分为0 即当前二进制数值为:0.0
0.875*2=1.75 整数部分为1 即当前二进制数值为:0.01 去掉1后继续运算。
0.75*2=1.5 整数部分为1 即当前二进制数值为:0.011 去掉1后继续运算。
0.5*2=1.0 整数部分为1 即当前二进制数值为:0.0111 去掉1后为0,运算结束。
0.4375的二进制数为:0.0111
十进制 = 16进制的整数部分 . 16进制的小数部分
将二进制101011.101转换为十六进制为2B.A
将十六进制6E.2转换为二进制为01101110.0010即1101110.001