java的移位操作详解,左移和右移
来源:互联网 发布:淘宝军工手机怎么样 编辑:程序博客网 时间:2024/04/30 02:34
注意
首先要明白一点,这里面所有的操作都是针对存储在计算机中中二进制的操作,那么就要知道,正数在计算机中是用二进制表示的,负数在计算机中使用补码表示的。
带符号的位移
左移位:<<,有符号的移位操作 左移操作时将运算数的二进制码整体左移指定位数,左移之后的空位用0补充
右移位:>>,有符号的移位操作 右移操作是将运算数的二进制码整体右移指定位数,右移之后的空位用符号位补充,如果是正数用0补充,负数用1补充。
例子
public static void main(String[] args){ System.out.println(3<<2);//3左移2位 System.out.println(-3<<2);//-3左移2位 System.out.println(6>>2);//6右移2位 System.out.println(-6>>2);//-6右移2位}
输出结果
12
-12
1
-2
分析:
00000000 00000000 00000000 00000011 +3在计算机中表示
00000000 00000000 00000000 0000001100 左移2位,补0,结果为12
——————————————————————————————————
00000000 00000000 00000000 00000011 +3在计算机中表示
11111111 11111111 11111111 11111100
11111111 11111111 11111111 11111101 -3在计算机中表示
11111111 11111111 11111111 1111110100 左移2位,补0,结果为负数,就是补码了,求原码
10000000 00000000 00000000 00001011
10000000 00000000 00000000 00001100 结果-12
——————————————————————————————————
00000000 00000000 00000000 00000110 +6在计算机中表示方法
0000000000 00000000 00000000 00000110 右移两位,正数补0,结果为1
——————————————————————————————————
00000000 00000000 00000000 00000110 +6在计算机中表示方法
11111111 11111111 11111111 11111001
11111111 11111111 11111111 11111010 -6在计算机中的表示
1111111111 11111111 11111111 11111010 右移两位,结果为负数
1000000000 00000000 00000000 000001
1000000000 00000000 00000000 000010 结果为-2
这个地方很容易弄混,多想几次就会慢慢理解了。
不带符号的位移
上面解释了带符号的移位操作,下面解释一下不带符号的移位操作
无符号的移位只有右移,没有左移使用“>>>”进行移位,都补充0
例如:
public static void main(String[] args)
{
System.out.println(6>>>2);
System.out.println(-6>>>2);
}
结果:
1
1073741822
分析:
00000000 00000000 00000000 00000110 +6在计算机中表示方法
0000000000 00000000 00000000 00000110 右移两位,正数补0,结果为1
————————————————————————————————
00000000 00000000 00000000 00000110 +6在计算机中表示方法
11111111 11111111 11111111 11111001
11111111 11111111 11111111 11111010 -6在计算机中的表示
0011111111 11111111 11111111 11111010 右移两位,补充0,结果为1073741822
————————————————————————————
移位操作要注意的问题是高(低)位是补0还是补1和对char, byte, short型的操作:
(1)<< : (left-shift), 最低位补0
(2)>> : (signed right-shift), 右移过程使用符号位扩展(sign extension),即如果符号为为1则高位补1, 是0则补0,也就是逻辑右移
(3)>>> : (unsigned right-shit),右移过程使用零扩展(zero extension),即最高位一律补0,也就是算术右移
(4)移位操作的数据类型可以是byte, char, short, int, long型,但是对byte, char, short进行操作时会先把它们变成一个int型,最后得到一个int型的结果,对long型操作时得到一个long型结果,不可以对boolean型进行操作。
(5)移位操作符可以和=合并起来,即 <<= 、 >>= 和 >>>=。例如 a >>= 2; 表示将a右移两位后的值重新赋给a。当时在使用这三个操作符对 byte, char, short型数据进行操作时要注意
转载第三方
http://blog.csdn.net/dandanteng/article/details/7433531
- java的移位操作详解,左移和右移
- java的移位操作详解,左移和右移
- java的移位操作详解,左移和右移
- java的移位操作详解,左移和右移
- java的移位操作详解,左移和右移
- java的移位操作详解,左移和右移
- java的移位操作详解,左移和右移
- Java的移位操作!!【左移和右移】
- 移位操作---左移和右移
- 移位运算(左移和右移)
- 左移位和右移位
- signed和unsigned之间以及移位操作相关左移和右移
- 整型数组左移或右移位简单操作
- java中的左移、右移移位运算符:<<,>>,>>>
- C#移位运算(左移和右移)
- C#移位运算(左移和右移)
- C#移位运算(左移和右移)
- C#移位运算(左移和右移)
- 算法作业HW18:LeetCode102 Binary Tree Level Order Traversal
- js内存泄露之js对象和dom对象互相引用
- CentOS7中firewalld使用简介
- 获取WiFi密码方法
- [转载]计算机编程常用词汇
- java的移位操作详解,左移和右移
- Oracle数据库之间数据同步
- 零基础Objective-C 第三章--------------面向对象编程的基础知识(2)
- Tomcat启动异常:Could not publish server configuration for Tomcat v7.0 Server at localhost.
- java文件读写
- 此请求已被阻止,因为当用在 GET 请求中时,会将敏感信息透漏给第三方网站。若要允许 GET 请求,请将 JsonRequestBehavior 设置为 AllowGet。
- 数据结构-顺序表的基本操作
- java环境搭建
- Xcode commit提交报错