进制间的转换,以及逻辑运算,位运算在进制间的使用
来源:互联网 发布: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个进制位,为一组;
- 进制间的转换,以及逻辑运算,位运算在进制间的使用
- JavaScript中逻辑运算符、位运算符以及简单数据类型转换的问题
- c++的位运算和逻辑运算
- 补充位与逻辑运算符的区别以及goto语句和高级运算符
- 使用位运算的数值转换程序
- 大小写转换函数,位运算的使用
- 移位运算符 以及 位逻辑运算符
- Java 进制转换、位运算、逻辑运算
- 进制转换、位运算、逻辑运算
- try catch && byte && 位运算符和逻辑运算符的使用规则
- JS的逻辑运算符&& ||和位运算符 & | 的区别
- 逻辑运算符与位运算符的重要区别
- 按位运算符与逻辑运算符的区别
- 容易搞混的逻辑运算符和位运算符
- &和&&的区别,逻辑运算符和位运算符
- java的逻辑运算符和位运算符
- c语言位运算符与逻辑运算符的区别
- 逻辑运算符、位运算符、移位运算符、三目运算符、运算符的优先级
- HDU 2719 The Seven Percent Solution
- JNI 开发笔记
- 12_求s=a+aa+aaa+...+aa...a的值
- [尺取法] CF660 C.Hard Process
- 初学者刚学c++在定义类时只有成员变量易犯的错误
- 进制间的转换,以及逻辑运算,位运算在进制间的使用
- 关于java“配置环境变量”的那些事
- 自学笔记3(方法的重写)
- U3D关于物体移动的方法的实例
- 正则表达式匹配
- 使用gulp来自动化部署前端项目
- Centos 上网
- 据挖掘中所需的概率论与数理统计知识
- 面试题3-二维数组的查找