二进制、八进制、十进制、十六进制的定义就不再赘述了
二进制 逢二进一; 八进制 逢八进一 ;十进制 逢十进一;十六进制 逢十六进一;
首先是我们生活中常用的十进制转换其他进制:
我们用除积倒取余 法,就是说比如我们要转二进制 就用 十进制除以2 取余,一直到0,然后倒取余就可以得到二进制,八进制就是把2换成8 ,以此类推。下面我们用例子说明
1 十进制转二进制:
例 : 89
89 / 2 = 44 -------1
44 / 2 = 22 -------0
22 / 2 = 11 -------0
11 / 2 = 5 ---------1
5 / 2 = 2 -----------1
2 / 2 = 1 -----------0
1 / 2 = 0 -----------1
二进制:1011001 (倒着取余)
可以再代码中输出验证一下:System.out.println(0b1011001);(在 java1.7以上的版本 0b 表示二进制)
这里就不截图,可以自己测试一下
再举例 :103
103 / 2 = 51 ----- 1
51 / 2 = 25 ---------1
25 /2 = 12 -----------1
12 / 2 = 6 ------------0
6 / 2 = 3 --------------0
3 / 2 = 1 --------------1
1 / 2 = 0 ---------------1
二进制:1100111
System.out.println(0b1100111 ); 结果为 103;
2.十进制转八进制
同样用除积倒取余,我们就还用 89为例吧;
89 / 8 = 11 -----1
11 / 8 = 1 -------3
1 / 8 = 0 ---------1
八进制: 131
System.out.println(0131); 结果为 89;
109为例
109 / 8 = 13 ----- 5
13 / 8 = 1 ---------5
1 / 8 = 0 ---------1
八进制: 155
System.out.println(0155); 结果为 109
转为十六进制同样用此方法,只要把 2 或者8 换成16就可以了,这里就不再举例说明了。
下面我们说一下 8421码的方法
我们写一下 二进制 11111111
我们来分开 :
1 1 1 1 1 1 1 1
从第一位来说:
2的7次方 = 128
第二位
2 的 6次方 = 64
第三位
2 的5次方 = 32
第四位
2 的 四次方 = 16
以此类推后面四位分别为 8 ----- 4 ------ 2 ----- 1
我们把值放到对应的二进制
1 1 1 1 1 1 1 1
128 64 32 16 8 4 2 1
这就是8421,可以把这看成一个表,
我们来举个例子
二进制 :1100111(上例中十进制103的二进制) 转成十进制
1 1 1 1 1 1 1 1
128 64 32 16 8 4 2 1
1 1 0 0 1 1 1
从这个表中我们可以得出 :
64*1 + 32 * 1 + 16 * 0 + 8*0 + 4*1 + 2*1 + 1*1 =
64 + 32 + 0 + 0 + 4 + 2 + 1 = 103
现在我们举例说明 十进制通过8421转二进制
还以 103为例:
1 1 1 1 1 1 1 1
128 64 32 16 8 4 2 1
首先 103 < 128 所以第一位 = 0
103 > 64 所以第二位 = 1
(103 - 64)= 39 > 32 所以第三位 = 1
39 - 32 = 7 < 16 所以第四位 = 0
7 < 8 所以第五位 = 0
7 > 4 所以第六位 = 1
7-4 = 3 > 2 所以第七位 = 1
3-2 = 1 = 1 所以第八位 = 1
二进制: 01100111 可以在代码中输出验证一下;
接下来二进制通过8421码转八进制
二进制转八进制 是三位一组 从后往前
1 1 1 1 1 1 1 1
128 64 32 16 8 4 2 1
还是用 103的二进制举例:
01 100 111 三位一组
拿第一组 111 对照8421码
1 1 1 分别对应的是 4 + 2 + 1 = 7
1 0 0 分别对应的是 4 + 2*0 + 1 * 0 = 4
0 1 分别对应的是 2*0 + 1*1 = 1
八进制结果: 147 可以在代码中输出验证一下;
103的二进制转 十六进制
二进制转十六进制是 四位一组
0110 0111 分成两组
0 1 1 0 分别对应 8*0 + 4*1 + 2*1 + 1*0 = 6
0 1 1 1 分别对应 8*0 + 4*1 + 2*1 + 1*1 = 7
十六进制 :0X67
至于十六进制转二进制 可以用除积倒取余方法
用 0X67 举例
67 拆分 6 和 7 ;
首先 7 / 2 = 3 ------1
3 / 2 = 1 --------1
1 / 2 = 0 ----------1
0 / 2 = 0 ---------- 0
得到的四位 就为 0 1 1 1
再说 6
6 / 2 = 3 ---- 0
3 / 2 = 1 ------- 1
1 / 2 = 0 -------- 1
0 / 2 = 0 ------- 0
补一位0
得到的四位 就是 0110
组合起来的二进制就是 : 01100111 = 103(十进制)
八进制(147) 转二进制
一位变三位
拆分为 1 和 4 和 7
先从7开始
7 / 2 = 3 ------ 1
3 / 2 = 1 ---------1
1 / 2 = 0 ----------1
然后是4
4 / 2 = 2 ----- 0
2 / 2 = 1 -------0
1 / 2 = 0 --------1
最后是 1
1 / 2 = 0 ----- 1
0 / 2 = 0 ------- 0
组合起来的二进制就是 01 100 111
有些乱。刚开始写,只要理解了除积倒取余和8421码,各进制之间的转换,你会发现,其实没那么难。