java移位操作符

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
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值