进制转换
这里简要提一下2进制、8进制、十进制、十六进制的互转
起源:
计算机信息使用电子元件保存,电子元件状态只有开闭两种,通过不同的开闭组合来保存信息,也就是我们的二进制的原型。
生活中的信息往往不只有两个状态,因此需要多个电子元件组合,我们将8个电子元件信息作为最小的存储单位,1byte=8bit。1mb=1024byte; 1gb=1024mb; 1tb=1024gb。 这也就是计算机的基本存储单位的概述。
衍生:
二进制对于开闭的描述使用10来表示,1代表开,0代表b。如十进制10即可表示为二进制110。为了区别于其他进制,二进制我们通常使用单位0b或者0B开头
二进制对于较大的数据存储描述的字符过长,如10表示为ob110,100表示为ob1100100,那如果10000呢?
对于数据的暴增,为了节约描述字符,我们将3个二进制合为一组作为10进制,用1个字符表示,如 1 100 100 表现为:144. 这也就是8进制的由来。8进制通常用单位0开头
同样的,随着数据暴增,8进制表示数据也有些过长,我们将4个长度二进制合为一组作为10进制,用1个字符来表示,如110 0100 表示成为 64。4个长度二进制表示的数据为0~15,对于10~15用阿拉伯数字0~9无法描述,因此对于10~15我们使用英文字符a-f或A-F来表示。这也就是十六进制的由来。十六进制通常用0x或者0X开头。
进制的互转:
其他进制转10进制:
二进制:
ob 1100100 = 0*2^0 + 0*2^1+ 1* 2^2 + 0*2^3 + 0*2^4 + 1*2^5 + 1*2^6
= 0 + 0 + 4 +0 + 0 + 32 + 64
= 100
八进制:
0 144 = 4*8^0 + 4*8^1 + 1*8^2
= 4 + 4*8 + 1*64
= 100
十六进制:
0x 64 = 4* 16^0 + 6*16^1
= 4*1 + 6*16
= 100
其他进制转换为十进制十分简单,只需要将数据从右往左每一位作为底数,乘以进制对应位置的次方,然后将值累加即可。这里我们衍生出几个单位用来描述我们的这种方法:
位权展开法:
0x 64 = 4* 16^0 + 6*16^1
= 4*1 + 6*16
= 100
这里
0x 64=>6*? + 4 * ?
?
指的是该位置的位权值,位权值= 进制^位置序号次方,位置序号从右往左一次为0 1 2 3 ...
也就是说其他数转十进制:
= ... 系数3 * 对应位权值 + 系数2*对应位权值 + 系数1*对应位权值
= ...系数3 * 进制^位置序号 + 系数2*进制^位置序号 + 系数1*进制^位置序号
如0x 64 = 6 * ? + 4* ?
= 6 * 16^1 + 4* 16^0 = 100
十进制转其他进制:
十进制转其他进制原理也就是位权展开法,将十进制数依次得到每一个位置的系数,然后附加单位且连接即可。
100 转2进制:
2 100 0
2 50 0
2 25 1
2 12 0
2 6 0
2 3 1
2 1 1
0
依次除以进制,得到的余数即是该位置的系数,一直到被除数为0即可,将所有系数连接起来,附上单位:
100 = 0b 1100100
同理 10进制转8进制:
8 100 4
8 12 4
8 1 1
0
100 = 0 144
位权展开法与逆位权展开法在所有进制转换通用,不仅仅限制在2 8 16 10 这几种进制
2进制与8进制与十六进制的互相转换:
通过十进制作为介质完成
2-> 8
2->10 10->8
2->16
2->10 10-> 16
8-> 16
8-> 10 10-> 16
因为8进制与16进制的产生原理,对于8进制和16进制与2进制的互转,可以不使用位权展开法而是依据原理解析转换。
8进制一位 -> 2进制的三位,然后连接
16进制一位 -> 2进制的4位,然后连接
0144 =
001 100 100 = 0b 1100100
0x64 = 0110 0100 = 0b 1100100
这种方法也叫做组合拆分法,通过的是2进制的3位组合得到的8进制的1位,2进制的4位组合得到16进制的1位的原理。
因此8进制和16进制的互转也可以通过2进制作为介质进行。
一般地,较大数据的进制转换通过计算机软件完成,我们只需要了解简单的执行原理即可,对于8位以内的数据的2进制转换,我们这里介绍一种8421码表法
128 64 32 16 8 4 2 1
100转2进制:
100 大于 等于128? 否,128对应系数为0
100 大于等于64 ? 是, 128对应系数为1 ,剩余数值为100 - 64 = 36
36大于等于32? 是,32对应系数为1,剩余数值为36-32=4
4大于等于16? 否,16对应系数为0
4大于等于8? 否,8对应系数为0
4大于等于4? 是,4对应系数为1,剩余数值为4-4 = 0
0大于等于2,否,2对应系数为0
0大于等于1,否1对应系数为0
因此,100得到的二进制位0b 1100100。同样8421用于2进制转10进制,不需要计算位权值而已。