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

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

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

 

你可能感兴趣的:(Java,位运算符,java)