进制间的转换,以及逻辑运算,位运算在进制间的使用

来源:互联网 发布:python unicode转ascii 编辑:程序博客网 时间:2024/06/06 05:08

前段时间,在封装 ImageLoader 的时候,设计到 MD5转换,看到位运算符,然后今天想花点时间,把之前学的最基础的 进制以及位运算知识搬到网上然后就有了这篇博客.

一、进制篇
首先,对于整数来说,有四种表现形式:
1.二进制:0和1组成, 规则:满二进一;
2.八进制 : 由0-7组成,规则:满八进一; 以0开头。
3.十进制 : 由0-9组成,规则:满十进一;
4.十六进制:有0到9,和 A-F 组成,以0x 开头;
上面以0x 或以0开头是为了防止进制混淆。

二、进制间的转换
(1)小转大
正常来说一般进制间转换,不管是八进制还是十六进制还是十进制,都需要先将进制转换成二进制,在进行其他进制间的转换。
例1:10进制转换8进制
10进制:39
第一步:先将10进制转换成2进制;
1–2–4–8–16–32–64–128–256
上面数字分别是2的几次幂,例如(2^0=1, 2^5=32);
在10进制转换2进制的过程中,先将10进制数分解成2的几次幂相加。
分解式:
32(2^5)+4(2^2)+2(2^1)+1(2^0);
然后从需要2的最大的幂数开始写,上面得出的结果为:
1 0 0 1 1 1
由于没有使用16和8所以在2的三次幂和四次幂都填写的是0,使用的填1,这样就完成了简单的转换了。

第二步:如果需要二进制向八进制转换
1 0 0 1 1 1
把6个二进制位拆成3个二进制位一组,如果有位数不够3的倍数,在二进制位前补0.
0 0 0 – 1 0 0 – 1 1 1
这时候把分开后的二进制位,当成单独的二进制进行转换,计算结果:
0–4–7(此时就是转换成的8进制)

下面是0–4–7怎么得到的过程:
0对应的是0 0 0
计算过程: 0*2^2+0*2^1+0*2^0=0
4对应的是1 0 0
计算过程: 1*2^2+0*2^1+0*2^0=4
7对应的是1 1 1
计算过程: 1*2^2+1*2^1+1*2^0=7

其实这块也比较好理解,把一个八进制位看成由三个二进制位组成,就很好理解了.

第三步:二进制转换十六进制原理
10进制的39
8进制47
2进制的100111
那么十六进制呢?
上面说到可以看成1个八进制位,可以看成3个二进制组成,也可以理解2的三次幂为8.
那么十六进制(16=2^4),也就可以理解成一个16进制位,可以看做4个二进制位组成.

那么对于二进制向十六进制的转换过程如下:
和八进制一样,分成4个二进制位为一组,不够再前面补0,不影响二进制结果.
39–>0 0 1 0 — 0 1 1 1
单独计算每一组的值
2 7
所以得出结果十进制39转化为十六进制的27.

总结下:
1.进制间的转换,都需要先转换成2进制,然后再用2进制向其他进制进行转换.
2.二进制向八进制转换,3个进制位,为一组;
3.二进制向十六进制转换,4个进制位,为一组;

1 0
原创粉丝点击