韩顺平 java 第二十讲 二进制、位运算、移位运算符
2015-09-26 17:19
381 查看
计算机二进制中的原码、补码、反码
计算机内部处理的信息都是采用二进制数来表示。进位规则是“逢二进一”int a = 1;
int类型是4个字节,一个字节等于八个bit。所以一共32bit。
重点内容
二进制的最高位是符号位,0代表正数,1代表负数正数的原码补码反码都一样
负数的反码=它的原码符号位不变其他位取反
负数的补码=它的反码+1
0 的反码、补码都是0
java没有无符号数,也就是说java中的数都是有符号的
在计算机计算的时候,都是以补码的方式来运算的
例子:模拟计算机计算1-2的过程
相当于:1+(-2)1的补码:0000……0001
-2的原码:1000……0010
-2的反码:1111……1101
-2的补码:1111……1110
所以:1和-2的补码相加:
得到:1111……1111
结果是补码。结果如果是正数的话,原码就是结果;但这个结果是负数,所以还要装换成原码:
结果的补码:1111……1111
结果的反码:1111……1110
结果的原码:1000……0001
也就是-1!
位运算符和移位运算符
这些操作都是准对补码来说的,操作之前都要转换成补码4个位运算,分别是:按位与&、按位或|、按位异或^、按位取反~;这几个运算都是针对补码来运行的。
3个移位运算:算数左移<<(低位溢出,符号位不变,并用符号位补溢出的高位);算数右移>>(符号位不变,低位补零);逻辑右移>>>(低位溢出,高位补零)
求下列输出结果:
int a = 1>>2; //结果:0 //1的补码:0000……0001 //右移两位:0000……0000(符号位为0) int b = -1>>2; //结果:-1 //-1的原码:1000……0001 //-1的反码:1111……1110 //-1的补码:1111……1111 //所以-1右移多少位都是-1 int c = 1<<2; //结果:4 //相当于乘以二 int d = -1<<2; //结果:-4 //-1的补码:1111……1111 //左移2位:1111……1100 //结果的反码:1111……1011 //结果的原码:1000……0100 //也就是-4 int e = 3>>>2; //结果:0 //3的补码:0000……0011 //逻辑右移3位:0000……0000 int a = ~2 //结果是:-3;过程如下: //2的补码是:0000……0010 //取反之后是:1111……1101 //很明显这个是负数的补码,要转换成原码: //结果的反码是:1111……1100 //结果的原码是:1000……0011 //也就是-3 int c = 2&3 //两个都是正数 //2的补码:0000……0010 //3的补码:0000……0011 //&之后: 0000……0010 //这个也是结果的原码,就是2 int d = 2|3 //这个同上个,结果是:3 int e = ~-5 //-5原码:1000……0101 //-5反码:1111……1010 //-5补码:1111……1011 //取反: 0000……0100 //是正数,所以结果是:4 int f = -3^3 //-3 的原码:1000……0011 //-3反码:1111……1100 //-3补码:1111……1101 //3补码:0000……0011 //然后二者异或:1111……1110(补码,负数:还需要转换成原码) //结果的反码:1111……1101 //结果的原码:1000……0010 //也就是:-2
如何用最快的方法判断一个数是2的n次方?移位运算
如果用最快的方法将一个数变成原来的二倍?移位运算
相关文章推荐
- MyEclipse更改项目名称
- Java继承、接口、试卷解析小结
- Eclipse配置前台开发环境
- JAVA文本域插入表情
- java web 分页查询、显示
- test8.5
- 阿里巴巴中间件性能挑战赛(RPC篇 复杂版)
- Eclipse创建Maven Web工程
- 在Myeclipse中移除项目对Hibernate的支持
- 对比synchronized与java.util.concurrent.locks.Lock 的异同
- 深入解析Java的包(package)
- test8.4
- SSH——Struts2中引入Spring
- SSH——Struts2中引入Spring
- JAVA常见的编码问题
- LeetCode|Reverse Words in a String-java
- LeetCode|Simplify Path-java
- LeetCode|Binary Search Tree Iterator-java
- LeetCode|LRU Cache-java
- LeetCode|Isomorphic Strings-java