位运算符详解(与,或,非,异或)

  • Post author:
  • Post category:其他



位运算符主要是以二进制规则进行运算





1.与(&)运算符


使用规则:两个二进制操作数对应位同为1 结果位 才为1,其余情况为0;

例如:

整数 a = 15   整数 b = 127


计算:(a & b)



15

的二进制位:

0000 1111



127

的二进制为:

0111 1111



即:(a & b) = 15





2.或(|)运算符


使用规则:两个二进制操作数对应位只要有一个为1 结果位 就为1,其余情况为0;

例如:

整数 b = 127   整数 c = 128


计算:(b | c)



127

的二进制位:

0111 1111



128

的二进制位:

1000 0000



即:(b | c) = 255





3.非(~)运算符


使用规则:一个二进制操作数,对应位为0,结果位为1;对应位为1,结果位为0;

作用是将每位二进制取反

例如:

整数 d = 1


计算:(~d)

十进制

1

的二进制表示为:



0000 0001


每位都取反为:



1111 1110


这是内存中的保存形式。我们读取的十进制是根据原码来读取,而在内存中,数值都是以二进制补码形式存储的。正数的补码和原码一样,负数的补码得到过程:原码 转 反码 再转 补码




负数的补码是在其原码的基础上, 符号位不变, 其余各位取反, 最后+1. (即在反码的基础上+1)




传送门:

原码, 反码, 补码 详解



然后计算取反后的补码,其真值就是结果。

在这里插入图片描述



即:(~d) = -2





4.异或(^)运算符


使用规则:两个二进制操作数对应位相同为0,不同为1;

例如:

整数 e = 2   整数 f= 3


计算:(e ^ f)



2

的二进制位:

0000 0010



3

的二进制位:

0000 0011

在这里插入图片描述


即:(e ^ f) = 1



5.代码实现

public class bitwise {
    public static void main(String[] args){
        int a = 15;
        int b = 127;
        int c = 128;
        int d = 1;
        int e = 2;
        int f = 3;
        System.out.println("a和b的 与运算 结果为:" + (a & b));
        System.out.println("b和c的 或运算 结果为:" + (b | c));
        System.out.println("d 非运算 的结果为:" + (~d));
        System.out.println("e和f 异或运算 的结果为: "  + (e ^ f));
    }
}

运算结果:

a和b的 与运算 结果为:15
b和c的 或运算 结果为:255
d 非运算 的结果为:-2
e和f 异或运算 的结果为: 1