• Java中几个特殊的运算符


    1、^(异或运算符)

    运算规则:相同则为0,相异则为1
    如:1010 ^ 1011 = 0001

    2、&(与运算符)

    运算规则:相同则为1,相异则为0
    如:1010 & 1011 = 1010
    另外&还能用于取余:x & (y-1)

    3、| (或运算符)

    运算规则:有一个为1,则为1,否则为0
    如:1010 | 1011 = 1011


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

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

    <无论正负数低位(最右边)都补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、&& (逻辑与运算符)

    运算规则:符号两边全为真是则为真,否则为假。
    &也可以做为逻辑与运算符,区别在于&会判断两边,而&&如果左边为假,右边就不执行了。因此&&也称为短路与

    8、|| (逻辑或运算符)

    运算规则:符号两边有一个为真则为真,否则为假
    | 也可以做为逻辑与运算符,区别在于 | 会判断两边,而 || 如果左边为假,右边就不执行了。因此 || 也称为短路或。

  • 相关阅读:
    GCC 生成动态库
    【PAT甲级】1127 ZigZagging on a Tree
    Spring Boot(10):异常处理
    面向对象编程原则(04)——开闭原则
    Boost ASIO:io_service 与 strand 的使用
    thinkphp5实现ajax图片上传,压缩保存到服务器
    万字长文深度解读Java线程池,硬核源码分析
    JAVA中解析package、import、class、this关键字
    微信小程序 - 渲染和逻辑
    139 单词拆分
  • 原文地址:https://blog.csdn.net/zhang_java_11/article/details/126279255