Java中移位操作运算符的理解
2016-07-20 10:17
204 查看
java中的移位运算符有三种:
1、 <<: 左移
2、 >>: 右移
3、 >>>: 无符号右移
使用方法:左移就是将左边的操作数在内存中的二进制数据左移指定的位数,左边移空的部分补零,右移:如果最高位是0,空位就填0,如果最高位是1,空位就填1。无符号右移无论最高位是什么,空位都补零。
数据在内存中以补码的形式存储
左移和右移的数学意义:
对于左移,对于整型a, a<<n=a*2^n(前提是结果在整型的范围之内),对于右移 正的整型a, a>>n=a/2^n,对于负的整型a,a>>n=-(|a|/2^n+1);
为什么对于右移,正数和负数的结果不一样呢?
我们可以看一个例子:
运行结果为:
对于123,其二进制数为0 1111011,右移两位相当于把0 111000右移两位,而0 111000的十进制为120,所以结果为120/4=30;
对于-123,其二进制数为1 0000101,右移两位相当于把1 0000100右移两位,而1 0000100的十进制为-124,所以结果为-124/4=-31。
1、 <<: 左移
2、 >>: 右移
3、 >>>: 无符号右移
使用方法:左移就是将左边的操作数在内存中的二进制数据左移指定的位数,左边移空的部分补零,右移:如果最高位是0,空位就填0,如果最高位是1,空位就填1。无符号右移无论最高位是什么,空位都补零。
数据在内存中以补码的形式存储
左移和右移的数学意义:
对于左移,对于整型a, a<<n=a*2^n(前提是结果在整型的范围之内),对于右移 正的整型a, a>>n=a/2^n,对于负的整型a,a>>n=-(|a|/2^n+1);
为什么对于右移,正数和负数的结果不一样呢?
我们可以看一个例子:
package sort; public class sort1 { public static void main(String[] args) { // TODO Auto-generated method stub int a=-123; System.out.println("原二进制位:"+Integer.toBinaryString(a)); int b=a>>2; System.out.println("右移两位结果为:"+b); System.out.println("右移后二进制位:"+Integer.toBinaryString(b)); int c=123; System.out.println("原二进制位:"+Integer.toBinaryString(c)); int d=c>>2; System.out.println("右移后的结果为:"+d); System.out.println("右移后二进制位:"+Integer.toBinaryString(d)); } }
运行结果为:
对于123,其二进制数为0 1111011,右移两位相当于把0 111000右移两位,而0 111000的十进制为120,所以结果为120/4=30;
对于-123,其二进制数为1 0000101,右移两位相当于把1 0000100右移两位,而1 0000100的十进制为-124,所以结果为-124/4=-31。
相关文章推荐
- Maven项目导入后报错
- springmvc(17)异步消息简介(部分)
- Ubuntu安装JDK
- Eclipse 搜索某一条字符串
- Eclipse怎样导入格式化模板
- java 导出excel,文件名称是乱码问题
- java操作LogBack(maven项目)
- JAVA 异步ajax实现xls 文件上传 并且解析xls
- Java类收集
- Java集合源码剖析】Java集合框架
- Spring-9:Bean的生命周期
- java实现的AES加密算法完整实例
- Java 包中重要接口介绍
- Eclipse中,Open Type(Ctrl+Shift+T)失效后做法。
- Spring读写分离的四种方案
- eclipse搭建Android运行模拟器
- Thinking in Java 第17章 容器深入研究(17.1-17.7)
- java日期时间比较大小
- (JAVA+TESTNG 三)Eclipse+TestNG搭建接口自动化测试框架
- Quartz