java移位操作符

来源:互联网 发布:中国战略布局知乎 编辑:程序博客网 时间:2024/06/06 04:14

java中,移位操作符操作的运算对象是二进制的“位”(bit)。
移位操作符只能处理整数类型(int,char, byte, short, long)。
移位操作符有三种:
(1)左移位操作符 “>>”:按照操作符右侧指定的位数将操作符左边的操作数向左移动(在低位补0)。
(2)(有符号)右移位操作符“<<”:按照操作符右侧指定的位数将操作符左侧的操作数向右移动。符号为正,高位补0;符号为负,高位补1。
(3)无符号右移位操作符“<<<”;按照操作符右侧指定的位数将操作符左侧的操作数向右移动,高位补0。
“移位”可与“等号”(<<=或>>=或>>>=)组合使用。此时,操作符左边的值会移动由右边的值指定的位数,再将得到的结果赋给左边的变量。但在进行“无符号”右移位结合赋值操作时,可能会遇到一个问题:如果对byte或short值进行这样的移位运算,得到的可能不是正确的结果。它们会先被转换成int类型,再进行右移操作,然后被截断,赋值给原来的类型,在这种情况下可能得到一1的结果。
下面是一个demo

public class ShiftOp{    public static void main(String[] args){        printL(2,1);        printL(4,2);        printL(-2,1);        printL(-4,2);        printR(2,1);        printR(2,2);        printR(-2,1);        printR(-2,3);        printUR(2,1);        printUR(-2,1);        printUR(16,2);        printUR(0,1);        //保留位数        short s = (short)10000;        printSR(s,1);        printL(s,4);    }    private static void printSR(short s ,int b){        System.out.println("s:" + s + " >> " + b + " = " + (s >> b) + "-bin=" + Integer.toBinaryString(s >>= b));    }private static void printR(int s ,int b){        System.out.println(s + " >> " + b + " = " + (s >> b) + "-bin=" + Integer.toBinaryString(s >>= b));    }    private static void printL(short s ,int b){        System.out.println("s:" + s + " << " + b + " = " + (s << b) + "-bin=" + Integer.toBinaryString(s <<= b) );    }private static void printL(int s ,int b){        System.out.println(s + " << " + b + " = " + (s << b) + "-bin=" + Integer.toBinaryString(s <<= b) );    }    private static void printUR(int s ,int b){        System.out.println(s + " >>> " + b + " = " + (s >>> b) + "-bin=" + Integer.toBinaryString(s >>>= b) );    }}

参考资料
《java编程思想》

0 0
原创粉丝点击