二进制转十六进制 算法实现思想

二进制转十六进制 算法实现思想

二进制

信息来源网络

在数学和数字电路中,二进制(binary)数是指用二进制记数系统,即以2为基数的记数系统表示的数字。这一系统中,数通常用两个不同的符号0(代表零)和1(代表一)来表示。以2为基数代表系统是二进位制的。数字电子电路中,逻辑门的实现直接应用了二进制,因此现代的计算机和依赖计算机的设备里都用到二进制。每个数字称为一个位元(二进制位)或比特(Bit,Binary digit的缩写)。

二进制的表示形式

0 0 0 1 表示 20
0 0 1 0 表示 21
0 1 0 0 表示 22
0 1 0 1 表示 22+20

十六进制

信息来源网络

十六进制(简写为hex或下标16)在数学中是一种逢16进1的进位制。一般用数字0到9和字母A到F(或a~f)表示,其中:A~F表示10~15,这些称作十六进制数字。
例如十进制数57,在二进制写作111001,在16进制写作39。
在历史上,中国曾经在重量单位上使用过16进制,比如,规定16两为一斤。
现在的16进制则普遍应用在计算机领域,这是因为将4个位元(Bit)化成单独的16进制数字不太困难。1字节可以表示成2个连续的16进制数字。可是,这种混合表示法容易令人混淆,因此需要一些字首、字尾或下标来显示。

十六进制表示形式

十进制转十六进制,采用余数定理分解,
4877÷16=304….13(D)
304÷16=19….0
19÷16=1….3
1÷16=0….1
这样就计到487710=130D16

思路分析

二进制转十进制

  • 二进制转成十进制原理**

    将十进制正数除以二,得到的商再除以二,依次类推,直到商为零或一,时为止,在旁边标出各步的余数,最后倒着写出来,就是该正整数的二进制。

  • 举例说明
    案例如下

    45/2=22…1
    22/2=11…0
    11/2=5…1
    5/2=2….1
    2/2=0….0
    1/2=0….1

结果:可以得到4510得二进制数为1011012
结论:从上面得转换,可以得出二进制转十进制得公式:十进制数 = 2n+2m+…. 其中n,m表示为二进制数中n,m位数字为1。
举例说明
拿上面得例子得结果:101101 可以得出该二进制的十进制数为:
25+23+22+20 = 32+8+4+1 = 45;

十进制转十六进制

相同的理论,把十进制数除以16,进行循环,直到得到结果值为0或1。
1610/16=100……10(A);
100 /16= 6……4;
6 /16= 0……6;

结果: 161010=64A16

二进制转十六进制具体实现

从小数点开始,向左右二边按“四位一段”分段(不足补0),然后,每一段的四位二进制数就对应一位十六进制数。(中间环节省略二进制转十进制,十进制转十六进制)。
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

重要:从上面的对应队列中,可以得出一个结论,运用数组对应每一个二进制匹配项,进行匹配。

初始化出数组长度为16的整形字符数组,1
a=[0000,0001,0010,0011,0100,0101,0110,0111,1000 ,1001,1010,1011,1100,1101,1110,1111]
则对于一个给定的二进制字符串binaryStr = “101101”,如何进行匹配,首先,对二进制字符串进行每四个字符分割为一组,不足四个字符的用0填补,意思就是上面的字符串,从右向左进行计数,四个一组,第一组1101,到第二组,发现只有10两个字符,使用0进行填补,填补后的结果是:0010,与上面对应的表进行匹配,可以得到十六进制。

你可能感兴趣的:(算法)