Java的位运算符详解实例——与(&)、非(~)、或(|)、异或(^)

参考链接:http://blog.csdn.net/vebasan/article/details/6193916

位运算符主要针对二进制,它包括了:“与”、“非”、“或”、“异或”。从表面上看似乎有点像逻辑运算符,但逻辑运算符是针对两个关系运算符来进行逻辑运算,而位运算符主要针对两个二进制数的位进行逻辑运算。下面详细介绍每个位运算符。

先看一个例子:

public static void main(String[] args) {
    int a=129;
    int b=128;
    System.out.println("a, "+a+", "+Integer.toBinaryString(a));
    System.out.println("b, "+b+", "+Integer.toBinaryString(b));
    System.out.println("a&b, "+(a&b)+", "+Integer.toBinaryString(a&b));
    System.out.println("a|b, "+(a|b)+", "+Integer.toBinaryString(a|b));
    System.out.println("a^b, "+(a^b)+", "+Integer.toBinaryString(a^b));
    System.out.println("~a, "+~a+", "+Integer.toBinaryString(~a));
    System.out.println("~b, "+~b+", "+Integer.toBinaryString(~b));
}


运行结果

a, 129, 10000001
b, 128, 10000000
a&b, 128, 10000000
a|b, 129, 10000001
a^b, 1, 1
~a, -130, 11111111111111111111111101111110
~b, -129, 11111111111111111111111101111111

结果分析

1.与运算符
与运算符用符号“&”表示,其使用规律如下:
两个操作数中位都为1,结果才为1,否则结果为0。

“a”的值是129,转换成二进制就是10000001,而“b”的值是128,转换成二进制就是10000000。根据与运算符的运算规律,只有两个位都是1,结果才是1,可以知道结果就是10000000,即128。

2.或运算符
或运算符用符号“|”表示,其运算规律如下:
两个位只要有一个为1,那么结果就是1,否则就为0。

a 的值是129,转换成二进制就是10000001,而b 的值是128,转换成二进制就是10000000,根据或运算符的运算规律,只有两个位有一个是1,结果才是1,可以知道结果就是10000001,即129。

3.非运算符
非运算符用符号“~”表示,其运算规律如下:

如果位为0,结果是1,如果位为1,结果是0。

4.异或运算符
异或运算符是用符号“^”表示的,其运算规律是:
两个操作数的位中,相同则结果为0,不同则结果为1。

分析上面的程序段:a 的值是15,转换成二进制为1111,而b 的值是2,转换成二进制为0010,根据异或的运算规律,可以得出其结果为1101 即13。

举例二

int c = 7;
System.out.println("c, "+c+", "+Integer.toBinaryString(c));
System.out.println("~1, "+(~1)+", "+Integer.toBinaryString(~1));
System.out.println("c&~1, "+(c&~1)+", "+Integer.toBinaryString(c&~1));

运行结果

c, 7, 111
~1, -2, 11111111111111111111111111111110
c&~1, 6, 110

结果分析

与(~1)进行&操作时,结果是操作数的最末位被置零。

原文地址:https://www.cnblogs.com/fengzhblog/p/3123617.html