按位与(&)、按位或(|)、按位异或(^)、按位取反(~)

1.是什么        

        在Java中,位运算是一种直接对整数在内存中的二进制位进行操作的方式(注意:在计算机运算时,都是以补码的方式来运算的,例如:加减乘除,按位与(&)等等)。以下是按位与(&)、按位或(|)、按位异或(^)以及按位取反(~)的详细解释和举例:

    不了解什么是补码的小伙伴可以看看另一期:

#彻底弄清:原码、反码、补码-CSDN博客


按位与(&)

        按位与运算符对两个操作数进行逐位比较,如果两个位都是1,则结果的对应位为1;否则,为0。

举例

public class Test {
    public static void main(String[] args){
        System.out.println(2&3);
    }
    
}

答案:2

图解:


按位或(|)

        按位或运算符对两个操作数进行逐位比较,如果两个位中至少有一个是1,则结果的对应位为1;如果两个位都是0,则结果的对应位为0。

举例

public class Test {
    public static void main(String[] args){
        System.out.println(-2|3);
    }
    
}

答案:-1

图解:

#可以看出负数的原码转换为补码比较复杂


按位异或(^)

        按位异或运算符对两个操作数进行逐位比较,如果两个位不相等,则结果的对应位为1;如果两个位相等,则结果的对应位为0。

举例

public class Test {
    public static void main(String[] args){
        System.out.println(5^-3);
    }
    
}

答案:-8   #注意:按位异或运算必须是一个为1,另一个为0,则结果为1,这题就不做解释了,原理和上面的图解一样,小伙伴们可以自己做做再对答案!


按位取反(~)

        按位取反运算符对一个操作数进行逐位取反,即将所有的1变成0,所有的0变成1。

举例

public class Test {
    public static void main(String[] args){
        System.out.println(~-2);
    }
    
}

答案:1

图解:


总结:

  1. 按位与(AND)

    • 这是一种二进制运算,其中两个位都是1时结果才是1,否则结果是0。对于有符号整数,使用补码表示时,按位与会正确地处理符号位。
  2. 按位或(OR)

    • 这也是一种二进制运算,其中至少有一个位是1时结果是1,只有两个位都是0时结果才是0。同样,使用补码表示有符号整数时,按位或也会正确处理符号位。
  3. 按位异或(XOR)

    • 这种运算中,两个位不相同时结果是1,相同时结果是0。在补码系统中,按位异或同样适用于有符号整数。
  4. 按位取反(NOT)

    • 这个操作将所有的位从0变成1,从1变成0。在补码系统中,按位取反可以用来生成一个数的相反数的补码(但不包括加1这一步)。

        这些位运算符在进行运算时,并不关心操作数是有符号还是无符号的,它们只是简单地对每一位进行操作。然而,当涉及到解释结果时,如果操作数被解释为有符号整数,那么通常会使用补码来得到正确的符号解释。

        例如,对于两个有符号整数,按位与、按位或和按位异或的结果也是补码形式的有符号整数。而按位取反操作本身不会产生一个有效的补码表示(除非你之后再加1来得到一个数的相反数的补码),但它仍然是在补码的基础上进行的操作。

         好啦,今天的干货就到这啦~    有什么建议或疑问的小伙伴欢迎到评论区留言!


猜你感兴趣的方面:

#你还能区分逻辑运算符吗?

#如何区分++i和i++???

#强制类型转换是什么?

#自动类型转换有哪些细节???

#JVM、JRE、JDK之间的关系

#彻底区分:基本数据类型、引用数据类型和包装类型

#成员变量、局部变量和静态变量的区别

#彻底弄清:原码、反码、补码

#值传递和引用传递的区别

  • 25
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值