Java按位运算符

Java按位运算符_第1张图片

public static void main(String[] args) {
        int a = 60; //                   二进制 00111100
        int b = 13; //                   二进制 00001101
        // 两位同时为“1”,结果才为“1”,否则为0。  计算规则:0&0=0;   0&1=0;    1&0=0;     1&1=1;
        System.out.println(a&b); // 结果:二进制 00001100  对应十进制的12。
        // 参加运算的两个对象只要有一个为1,其值为1。0|0=0;   0|1=1;   1|0=1;    1|1=1;
        System.out.println(a|b); // 结果:二进制 00111101  对应十进制的61。
        // 参加运算的两个对象,如果两个相应位为“异”(值不同),则该位结果为1,否则为 0。 计算规则:0^0=0;   0^1=1;   1^0=1;    1^1=0;
        System.out.println(a^b); // 结果:二进制 00110001  对应十进制的49。
    }

补充一下左移<<运算。

2<<3是计算2*8的值。也就是2*(2的三次方)的值。

<<3是左移三位。

十进制的2用二进制表示是10

将10左移三位,低位补0,也就是10000(即10进制的16),也就是十进制2*8=16。

^运算使用场景一:

可以用于交换两个变量的值,例如:x=2,y=16,想要x、y互换值,即x=16,y=2。

代码实现:

x = x ^ y; // (1)

y = x ^ y; // (2)

x = x ^ y; // (3)

2用二进制表示是10,16用二进制表示是10000,

行一:00010 ^ 10000 = 10010

行二:10010 ^ 10000 = 00010

行三:10010 ^ 00010 = 10000

经过三行运算之后x = 10000,y = 00010,即x = 16, y = 2。

^运算使用场景二:

有一组整数,有一个数只出现了一次,其他数都出现了两次,让找出这个只出现了一次的数。

用到的知识:两个相同的数异或的结果是 0,一个数和 0 异或的结果是它本身。

所以我们把这一组整数全部异或一下最后得到的那个数,就是只出现了一次的数。

假设这组数是1、2、3、4、5、1、2、3、4。

Java按位运算符_第2张图片

你可能感兴趣的:(java,开发语言,算法)