JAVA中运算符的详讲

JAVA中运算符的详讲

1. ^(异或运算符)
^是针对二进制的二目运算符。运算规则:两个二进制数值如果在同一位上相同,则结果中该位为0,否则为1,比如1011 & 0010 = 1001。

2. |(或运算符)
|是针对二进制的二目运算符。运算规则:两个二进制数值如果在同一位上至少有一个1,则结果中该位为1,否则为0,比如1011 & 0010 = 1011。

3. &(与运算符)
&是是针对二进制的二目运算符。需要注意的是&&是java中判断条件之间表示“和”的标识符,&是一个二目运算符,两个二进制数值如果在同一位上都是1,则结果中该位为1,否则为0,可以认为两个都是true(1),结果也为true(1),比如1011 & 0110 = 0010。

&还有一个比较重要的地方,也是面试中经常出现的问题,即该运算符可以计算余数。我们知道四则运算中速度最慢的就是除,而取余操作更加慢,因此可以通过&来快速的求两个数的余数,来看例子:

public ModTest{

    public static void main(String[] args){

        System.out.println(45 & 11);
        System.out.println(45 & 7);
    }
    /**result:3, 5*/
}
给定x, y两个数值,想求x与y的余数,只需要x & (y-1)即可,如上面例子所示,想求45和12(45和8)的余数,只要求45 & 11(45 & 7)。

以下三种运算符都是位运算符

>>x(常数): 向右移动x位(顶点在哪个方向就往哪个方向移动),如果该数是正数,则高位(最左边)补x个0,如果是负数,则最高位补x个1。

<<x(常数): 向左移动x位(顶点在哪个方向就往哪个方向移动),无论正负数低位(最右边)都补x个0。

<<<: 无该表示方式。

>>>x(常数): 表示无符号右移x位,所谓无符号是与>>x对比,该操作在移动后,无论正负数高位(最左边)都补0。

4. <<(左移运算符)
举例1:-20<<2
原码:10000000 00000000 00000000 00010100

反码: 11111111   11111111   11111111  11101011(符号位不变,其他位取反)

补码: 11111111   11111111   11111111  11101100(反码 + 1)

左移两位(最右边两位添0)

补码: 11111111   11111111   11111111  10110000

反码: 11111111   11111111   11111111  10101111(补码 – 1)

原码: 10000000 00000000 00000000 01010000(符号位不变,其他位取反)

结果:-80

举例2:20<<2
原码(反码,补码):00000000 00000000 00000000 00010100

左移两位(最右边两位添0)

原码(反码,补码):00000000 00000000 00000000 01010000

结果:80

5. >>(右移运算符)
举例1:-20>>2
原码:10000000 00000000 00000000 00010100

反码: 11111111   11111111   11111111  11101011(符号位不变,其他位取反)

补码: 11111111   11111111   11111111  11101100(反码 + 1)

右移两位(最左边两位添1)

补码: 11111111   11111111   11111111  11111011

反码: 11111111   11111111   11111111  11111010(补码 – 1)

原码: 10000000 00000000 00000000 00000101(符号位不变,其他位取反)

结果:-5

举例2:20>>2
原码(反码,补码):00000000 00000000 00000000 00010100

右移两位(最左边两位添0)

原码(反码,补码):00000000 00000000 00000000 00000101

结果:5

6. >>>(无符号右移运算符)
举例1:-2>>>1
原码:10000000 00000000 00000000 00000010

反码: 11111111  11111111   11111111  11111101(符号位不变,其他位取反)

补码: 11111111  11111111   11111111  11111110(反码 + 1)

右移1位(无符号位运算符,最左边一位只添0)

补码: 01111111  11111111   11111111  11111111

反码: 01111111  11111111   11111111  11111111(高位为0,正数)

原码: 01111111  11111111   11111111  11111111(与反码相同)

结果:2147483647

举例2:2>>>1
原码(反码,补码):00000000 00000000 00000000 00000010

右移一位(最左边一位添0)

原码(反码,补码):00000000 00000000 00000000 00000001

结果:1

7.额外知识
^=、|=、&=、<<=、>>=、>>>=与不加等号差不多,只是加入了赋值操作,以>>=为例:

public class Test {

    public static void main(String[] args) {

        int num = 2;
        System.out.println(num>>=1);
        System.out.println(num);
    }
    /**result:1  1
}

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/114840.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • docker-compose 集群_docker redis 集群

    docker-compose 集群_docker redis 集群前言实际工作中我们部署一个应用,一般不仅仅只有一个容器,可能会涉及到多个,比如用到数据库,中间件MQ,web前端和后端服务,等多个容器。我们如果一个个去启动应用,当项目非常多时,就很难记住了,所有

    2022年8月6日
    5
  • WebIDE的安装「建议收藏」

    WebIDE的安装「建议收藏」CreatedbyJerryWang,lastmodifiedonJun02,2015https://store.sap.com/下载安装文件:通过注册时维护的mail地址获得下载link:确保JDK或者JRE至少在1.7以上:2.所有下载的安装文件置于SAPWebIDEfolder下,hierarchy如下图所示:使用如下命令行进行安装:通过修改…

    2022年10月18日
    2
  • 国内一些比较大型的IT外包公司[通俗易懂]

    国内一些比较大型的IT外包公司[通俗易懂]下面的这些公司是我根据网上的资料整理出来的。找工作的同学都要看看,下面这些是国内一些比较大型的外包公司,想进外包公司的和不想进的都要了解一下,别进错了。序号公司名称英文备注1.博朗软件Bleum上海2.东软集团Neusoft沈阳3.大连华信-大连4.新致软件…

    2022年4月26日
    226
  • 并发编程之手写一个简单的线程池

    并发编程之手写一个简单的线程池

    2021年8月4日
    80
  • C++ STL map集合的使用「建议收藏」

    C++ STL map集合的使用「建议收藏」有时需要根据索引找到对应的元素,像键值对一样的查找,并对这些元素进行操作。可以同故宫调用STL里面的map来解决这个问题。

    2022年5月29日
    45
  • 压缩文件的加密与破解

    压缩文件的加密与破解压缩文件的加密与破解0x00前言0x01过程1.压缩文件的加密注意点:2.压缩文件的解密0x00前言这是我对压缩文件的加密与破解的学习记录。0x01过程1.压缩文件的加密安装Winzip、Winrar软件进行加密在建好的文档右键—-&gt;添加到压缩文件—-&gt;选择rar/zip—-&gt;高级—-&gt;设置密码注意点:1.尽量不要使用Winra…

    2022年4月29日
    54

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号