JAVA 进制转换
2015-08-23 23:13
253 查看
进制转换
本文属于自己学习记录,本人新人一枚,欢迎纠正错误和参与讨论创建于2015年8月23日
一、二进制的由来?
二进制是18世纪德国数理哲学大师莱布尼茨发明的。某天莱布尼茨的朋友布维向莱布尼茨介绍了《周易》和《八卦》,发现八卦上的阴阳和他发明的二进制简直一样,但是实际上莱布尼茨是受中国阴阳太极的影响,只不过他付出了诸多研究,推演出了二进制。他感到这个来自古老中国文化的符号系统与他的二进制之间的关系实在是太明显了,因此断言:二进制乃是最具有世界普遍性的、最完美的逻辑语言。【参考自百度百科】
二、二进制的定义
二进制数据是采用0和1两个数码来表示的数。它的基数为2,进位规则为“逢二进一 ”,借位规则是“借一当二”。当前计算机系统使用的基本上是二进制系统,数据在计算机中主要是以补码的形式存储的。计算机中的二进制则是一个非常微小的开关,用“开”来表示1,“关”来表示0。
同样,八进制、十进制、十六进制都是类似的
三、进制转换表(参考附录)
四、进制转换
二进制:是由0和1组成的,满二进一,单位:位
二进制转换为十进制和十六进制:
二进制数: 0010 0000 1000 (4位一取)
1、首先是这0010 = 0^3 + 0^2 + 2^1 + 0^0 = 2
2、接着是这0000 = 0^3 + 0^2 + 0^1 + 0^0 = 0
3、接着是这1000 = 2^3 + 0^2 + 0^1 + 0^0 = 8
4、十进制结果 = 2*256 + 0*16 + 8 = 520
5、十六进制结果 = 208
结论:为什么最后的结果会这样算,因为我们这个地方的2进制是4位取一个,然而4位代表的是一个十六进制大小,所以我们最右边的1000换成10进制就是8;0000是在第一个的基础上的16倍,所以是0*16;0010是在第一个的基础上的16*16倍,所以就是2*256。仍有疑惑的可以参考【附录】。
二进制数转换为十进制和八进制
二进制数: 001 000 001 000 (3位一取)
1、首先是这001 = 0^2 + 0^1 + 2^0 = 1
2、接着是这000 = 0^2 + 0^1 + 0^0 = 0
3、接着是这001 = 0^2 + 0^1 + 2^0 = 1
4、接着是这000 = 0^2 + 0^1 + 0^0 = 0
5、十进制结果 = 1*8*8*8 + 0*8*8 + 1*8 + 0 = 520
6、八进制结果 = 1010
结论:可以看出,当我们3位一取的时候,也就是3位表示一个8进制,最后得出的十进制依然是520,这个地方只是取得位数不同,结论依旧是一样的。
二进制总结:
① 8位 = 1字节;
② 1字节 = 两个十六进制数(比如CD);
③ C = 4位;D = 4位
④ 所以十六进制是以4位来取的,同样八进制是以3位来取
八进制:由0~7组成,逢八进一
八进制转换为二进制、十进制、十六进制:
八进制数:32
转二进制:结果 = 011 010
转十进制:结果 = 3*8 + 2 = 26 或者
结果 = 0^5 + 2^4 + 2^3 + 0^2 + 2^1 + 0^0 = 26
转十六进:结果 = 0001 1010 = 1A
十进制:由0~9组成,逢十进一
十进制转换为二进制、八进制、十六进制:
十进制数:65
转二进制:结果 = 0100 0001
65 = 64 + 1 = 2^6 + 2^0 = 0100 0001
转八进制:结果 = 101
101 = 0100 0001 = 001 000 001
转十六进:结果 = 41
41 = 0100 0001
十六进制:由0~9、A~F组成,逢十六进一
十六进制转换为二进制、八进制、十进制:
十六进制:C8
转二进制:结果 = 1100 1000
转八进制:结果 = 011 001 000 = 310
转十进制:结果 = 12*16 + 8 = 200
五、二进制位运算表
二进制位运算优点:
①特定情况下,计算方便,速度快,被支持面广
②如果用算数方法,速度慢,逻辑复杂
六、二进制位运算
按位与(&)
两位全为1,结果才为1
0&0=0 0&1=0 1&0=0 1&1=1
例如:32&4=0010 0000 & 0000 0100 = 0000 0000 = 0
位运算的特殊用法
(1)清零。如果想将一个单元清零,即使其全部二进制位0,只要与一个各位都为0的相与,结果就为零。
(2)取一个数中的指定位。想要取得值全部和1相与,不需要的值和0相与。
按位或( | )
只要有一个为1,则结果为1
0 | 0 = 0 0 | 1 = 1 1 | 0 = 1 1 | 1 = 1
例如:32 | 4=0010 0000 | 0000 0100 = 0010 0100 = 36
或运算的特殊用法
置1。如果想要把指定的位替换成1,则只需要和指定的地方按位或1,结果就全是1。
异或运算(^)
相同为0,不同为1
0^0=0 0^1=1 1^0=1 1^1=0
例如:32 | 4=0010 0000^0000 0100 = 0010 0100 = 36
异或运算的特殊用法
(1)特定翻转:如果把指定的位要翻转,则只需要把指定的位和1按位异或。
(2)与0异或,保留原值
取反运算(~)
将一个2进制按位取反,即将0变1,1变0
左移运算(<<)
①将一个运算对象的各二进制位全部左移若干位(左边的二进制位丢弃,右边补0)
②若左移时舍弃的高位不包含1,则每左移一位,相当于该数乘以2
右移运算(>>)
①将一个数的各二进制数全部右移若干位,正数左补0,负数左补1,右边丢弃
②操作数每右移一位,相当于该数除以2
无符号右移运算(>>>)
各个位向右移指定位数。右移后左边空出的位用0填充。移出右边的位被丢弃
原码
一个整数按照绝对值大小转换成的二进制数成为原码
反码
将二进制数按位取反,所得的二进制数称为原二进制数的反码。
补码
将反码加1叫做补码
附录:
相关文章推荐
- Java(十二)--List的添加,修改,删除
- java 接收json数据
- 学习Spring必学的Java基础知识(7)----事务基础知识
- java新手笔记25 日期格式化
- 原码、补码、反码
- java中的Runtime类
- Java 拷贝文件及目录
- Java递归算法
- Java递归算法
- Java递归算法
- Java如何解决脆弱基类(基类被冻结)问题
- DesignPattern_Java:Abstract Factory Pattern
- Java泛型应用示例
- java新手笔记24 Math/String对象
- 翻转子串(Java)
- Java多线程编程-同步方法
- (2.1.23)java的枚举enum
- Java运算符优先级表
- Struts2学习笔记(一):struts2开发环境配置
- Spring Named Parameters examples in SimpleJdbcTemplate