Java中的>>,<<和>>>

本文详细介绍了Java中的位运算符,包括右移(&gt;&gt;)、左移(&lt;&lt;)及无符号右移(&gt;&gt;&gt;)运算符的使用方法,并通过实例演示了这些运算符在正数和负数上的应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

最近在看Java的基础知识,虽然自己目前在做Android,但是Android就是用Java编写的,所以Java也是很重要的。故自己在这里记录一下自己的学习过程,以供查阅。
Java中有这样几个运算符,>> << >>>,他们的含义已经相应的用途这次我会把它们记录下来。这里再补充一句,没有<<<运算符。
“>>”运算符:将二进制位进行右移操作。
“<<”运算符:将二进制位进行左移操作。
“>>>”运算符:无符号右移,忽略符号位,空位都以0补齐。

从上面的论述可能还是没有弄明白,后面就来举例子:

        int n = 31;//n二进制为11111
        int m = (n >> 3);//m=11(二进制)
        System.err.println("result is " + m);

结果是:

        result is 3

也就是把11111向右移动了3位,也就是11,最后的结果是3.

再看这一段代码:

        int n = 18;//n二进制为10010
        int m = (n << 3);//m = 10010000
        System.err.println("result is " + m);

结果是:

        result is 144

上面的都是正数进行的移位计算,直接移动即可。那我们再看下面这种情况:
如果是负数的话,进行上述的移位运算应该是什么样子呢?首先我们要知道负数转成二进制数应该是什么样子的:

        int n = -15;
        String m = Integer.toBinaryString(n);
        System.err.println(m);

结果是:

        11111111111111111111111111110001

下面就来把负数转换成二进制数的规则描述一下,其中省略了补码,反码等概念,直接描述过程:
1.首先,我们假设需要转换的数字是上述的-15,我们首先取它的绝对值,也就是15,并使用15的二进制数:00000000 00000000 00000000 00001111
2.然后,把每一位都取反,我们得到的是11111111 11111111 11111111 11110000
3.第三步,在最后一位加1,得到11111111 11111111 11111111 11110001,这也就是我们最后的结果。
同样地,负的二进制数转化成为正常的十进制数的过程,应该是用上面的步骤倒着执行即可。

下面我们来看代码:

        int n = -15;
        int m = (n >> 3);
        System.err.println("result is " + Integer.toBinaryString(m));

结果是:

        11111111111111111111111111111110(转成10进制可以从上面看)

也就是转成11111111 11111111 11111111 11110001后,整体向右移动三位,并且左侧补全1,最后得到的答案就是11111111111111111111111111111110。

同样地,如果是左移运算符<<的话:

        int n = -15;
        int m = (n << 3);
        System.err.println("result is " + Integer.toBinaryString(m));

结果是:

        result is 11111111111111111111111110001000

也就是整体左移三位,最右侧补全0即可。

最后我们来看>>>运算符:

        int n = 15;
        int m = (n >>> 3);
        System.err.println("result is " + Integer.toBinaryString(m));

结果是

    result is 1

如果输入值是负数的话,

        int n = -15;
        int m = (n >>> 3);
        System.err.println("result is " + Integer.toBinaryString(m));

结果是

        result is 11111111111111111111111111110

正数情况下就不用解释了,我们来看负数,-15的二进制数应该是11111111 11111111 11111111 11110001,那么当我们右移三位的时候,同时左侧空出来的位数补全为0,即00011111111111111111111111111110,也就是最后的结果11111111111111111111111111110。所以,>>>的计算规则就是, 忽略了符号位扩展,0补最高位。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值