1.十进制转二进制
比如120这个数,转二进制,只需要一直除2取余数即可(最后结果为最高位),小数采用“乘2取整”:
120/2 = 60 余 0;
60/2 = 30 余 0;
30/2 = 15 余 0;
15/2 = 7 余 1;
7/2 = 3 余 1;
3/2 = 1 余 1;
1/2 = 0 余 1;
//最后结果为 111 1000,当然一般都是八位就是 0111 1000;
2.十进制转十六进制
还是120,只需要一直除16取余数即可(最后结果为最高位):
120/16 = 7 余 8;
7/16 = 0 余 7;
//最后结果为 78;
3.二进制转十进制
如0111 1000,需要N * 2^N:
0 * 2^0 +
0 * 2^1 +
0 * 2^2 +
1 * 2^3 +
1 * 2^4 +
1 * 2^5 +
1 * 2^6 +
0 * 2^7 = 120
4.十六进制转十进制
如78,需要N * 16^N:
8 * 16^0 +
7 * 16^1 = 120
5.二进制转十六进制,十六进制转换二进制
首先我们来看一个二进制数: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= 8,然后依次是 2 = 4,=2, 2 = 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
....
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 + 4 + 1,即:1101。
所以,FD转换为二进制数,为: 1111 1101
由于十六进制转换成二进制相当直接,所以,我们需要将一个十进制数转换成2进制数时,也可以先转换成16进制,然后再转 换成2进制。
比如,十进制数 1234转换成二制数,如果要一直除以2,直接得到2进制数,需要计算较多次数。所以我们可以先除以16,得 到16进制数:
被除数 | 计算过程 | 商 | 余数 |
1234 | 1234/16 | 77 | 2 |
77 | 77/16 | 4 | 13 (D) |
4 | 4/16 | 0 | 4 |
结果16进制为: 0x4D2
然后我们可直接写出0x4D2的二进制形式:0100 1101 0010。
其中对映关系为:
0100 -- 4
1101 -- D
0010 -- 2
同样,如果一个二进制数很长,我们需要将它转换成10进制数时,除了前面学过的方法是,我们还可以先将这个二进制转换 成16进制,然后再转换为10进制。
下面举例一个int类型的二进制数:
01101101 11100101 10101111 00011011
我们按四位一组转换为16进制: 6D E5 AF 1B