Java移位运算符

来源:互联网 发布:excel筛选重复数据 编辑:程序博客网 时间:2024/05/17 01:33

移位运算符就是在二进制的基础上对数字进行平移。按照平移的方向和填充数字的规则分为三种:<<(左移)、>>(带符号右移)和>>>(无符号右移)。
         在移位运算时,byte、short和char类型移位后的结果会变成int类型,对于byte、short、char和int进行移位时,规定实际移动的次数是移动次数和32的余数,也就是移位33次和移位1次得到的结果相同。移动long型的数值时,规定实际移动的次数是移动次数和64的余数,也就是移动66次和移动2次得到的结果相同。

<<  (左移) :
运算规则:二进制形式向左移动,高位移出(舍弃),低位补0。
例如:
正数:
3<<3
3的二进制形式为:0000 0000 0000 0000 0000 0000 0000 0011
左移3位为:0000 0000 0000 0000 0000 0000 0001 1000
结果为:24。

负数:
-3<<3
-3的二进制形式为:1000 0000 0000 0000 0000 0000 0000 0011

-3的二进制反码为:1111 1111 1111 1111 1111 1111 1111 1100

-3的二进制补码为:1111 1111 1111 1111 1111 1111 1111 1101
左移3位为:1111 1111 1111 1111 1111 1111 1110 1000
结果为负数,所以需要换算,结果-1得到反码,再反码得到原码。
结果反码为:1111 1111 1111 1111 1111 1111 1110 0111
结果再反码得到原码:1000 0000 0000 0000 0000 0000 0001 1000
结果为:-24。

例程:

public class BitOperator {

 public static void main(String[] args) {
  System.out.println("3<<3: "+(3<<3));
  System.out.println("(-3)<<3: "+((-3)<<3));
 }

}


输出:

3<<3: 24
(-3)<<3: -24


数学意义:在数字没有溢出的前提下,对于正数和负数,左移一位都相当于乘以2的1次方,左移n位就相当于乘以2的n次方。


>> (右移) :
运算规则:二进制形式向右移动,低位移出(舍弃),高位的空位补符号位,即正数补0,负数补1。
例如:
正数:
3>>3
3的二进制形式为:0000 0000 0000 0000 0000 0000 0000 0011
右移3位为:0000 0000 0000 0000 0000 0000 0000 0000
结果为:0。

负数:
-3>>3
-3的二进制形式为:1000 0000 0000 0000 0000 0000 0000 0011

-3的二进制反码为:1111 1111 1111 1111 1111 1111 1111 1100

-3的二进制补码为:1111 1111 1111 1111 1111 1111 1111 1101
右移3位为:1111 1111 1111 1111 1111 1111 1111 1111
结果为负数,所以需要换算,结果-1得到反码,再反码得到原码。
结果反码为:1111 1111 1111 1111 1111 1111 1111 1110
结果再反码得到原码:1000 0000 0000 0000 0000 0000 0000 0001
结果为:-1。

例程:

public class BitOperator {

 public static void main(String[] args) {
  System.out.println("3>>3: "+(3>>3));
  System.out.println("(-3)>>3: "+((-3)>>3));
 }

}


输出:

3>>3: 0
(-3)>>3: -1


数学意义:右移一位相当于除2,右移n位相当于除以2的n次方。


>>> :

运算规则:按二进制形式把所有的数字向右移动对应巍峨位数,低位移出(舍弃),高位的空位补零。对于正数来说和带符号右移相同,对于负数来说不同。其他结构和>>相似。


部分参考:http://blog.csdn.net/Mailbomb/article/details/2496168










0 0
原创粉丝点击