Java 位运行 ”<<“, “>>“, ”>>>“

Java 位运行 ”<<“, “>>“, ”>>>“

 

java中有三种移位运算符

<<      :     左移运算符,num << 1,相当于num乘以2

>>      :     右移运算符,num >> 1,相当于num除以2

>>>    :     无符号右移,忽略符号位,空位都以0补齐

jdk版本:jdk1.8.0_201

话不多说,直接上代码:

 
/**
 * TODO
 *
 * @author lxy
 * @version 1.0
 * @date 2021/2/25 8:39
 */
public class BitwiseTest {

    public static void main(String[] args) {
        final  int number = -10;
        final  int number_1 = 10;

        System.out.println("number = " +number);
        //右移位 乘以2, 算数运算,保留符号位
        System.out.println("number >>  1L = " + (number >>  1L));
        //右移位 除以2, 算数运算,保留符号位
        System.out.println("number <<  1L = " + (number <<  1L));

        //无符号右移位,逻辑移位,高位以0补充,原来为复数移位后丢符号。
        System.out.println("number <<<  1L = " + (number >>>  1L));

        System.out.println();
        System.out.println("number_1 = " +number_1);
        //右移位 乘以2, 算数运算,保留符号位
        System.out.println("number_1 >> 1L = " + (number_1 >> 1L) +"  "+getBite((long) (number_1 >> 1L)));
        //右移位 除以2, 算数运算,保留符号位
        System.out.println("number_1 << 1L = " + (number_1 << 1L) +"  "+getBite((long) (number_1 << 1L)));
        //无符号右移位,逻辑移位,高位以0补充,原来为复数移位后丢符号。
        System.out.println("number_1 <<< 1L = " + (number_1 >>> 1L) +"  "+getBite((long) (number_1 >>> 1L)));


        System.out.println();
        /**
         * 异或运算符
         * 异或运算符是用符号“^”表示的,其运算规律是:
         * 两个操作数的位中,相同则结果为0,不同则结果为1。
         *
         * @date 2021/2/25 9:23
         * @return void
         */

        System.out.println("number_1 = " +number_1);
        System.out.println(1L+"   "+getBite(1L));
        //右移位 乘以2, 算数运算,保留符号位
        System.out.println("1L ^ (number_1 >>  -1L) = " + (1L ^ (number_1 >> 1L)) +"  "+getBite((1L ^ (number_1 >> 1))));
        //右移位 除以2, 算数运算,保留符号位
        System.out.println("1L ^ (number_1 <<  -1L) = " + (1L ^  (number_1 << 1L)) +"  "+getBite((1L ^ (number_1 << 1))));
        //无符号右移位,逻辑移位,高位以0补充,原来为复数移位后丢符号。
        System.out.println("1L ^ (number_1 <<<  -1L) = " + (1L ^ (number_1 >>> 1L)) +"  "+getBite((1L ^ (number_1 >>> 1))));

        System.out.println();
        System.out.println("number_1 = " +number_1);
        //右移位 乘以2, 算数运算,保留符号位
        System.out.println("-1L ^ (number_1 >>  -1L) = " + (-1L ^ (number_1 >> -1L)) +"  "+getBite((-1L ^ (number_1 >> -1L))));
        //右移位 除以2, 算数运算,保留符号位
        System.out.println("-1L ^ (number_1 <<  -1L) = " + (-1L ^  (number_1 << -1L)) +"  "+getBite((-1L ^ (number_1 << -1L))));

        //无符号右移位,逻辑移位,高位以0补充,原来为复数移位后丢符号。
        System.out.println("-1L ^ (number_1 <<<  -1L) = " + (-1L ^ (number_1 >>> -1L)) +"  "+getBite((-1L ^ (number_1 >>> -1L))));



    }


    public static String getBite(Long bit){
        return Long.toBinaryString(bit);
    }
}

 

结果:


number = -10
number >>  1L = -5
number <<  1L = -20
number <<<  1L = 2147483643

number_1 = 10
number_1 >> 1L = 5  101
number_1 << 1L = 20  10100
number_1 <<< 1L = 5  101

number_1 = 10
1   1
1L ^ (number_1 >>  -1L) = 4  100
1L ^ (number_1 <<  -1L) = 21  10101
1L ^ (number_1 <<<  -1L) = 4  100

number_1 = 10
-1L ^ (number_1 >>  -1L) = -1  1111111111111111111111111111111111111111111111111111111111111111
-1L ^ (number_1 <<  -1L) = -1  1111111111111111111111111111111111111111111111111111111111111111
-1L ^ (number_1 <<<  -1L) = -1  1111111111111111111111111111111111111111111111111111111111111111

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值