位运算

基础知识

&(与)

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

例子1

1
2
3
int a=129;
int b=128;
System.out.println("a&b的结果是:"+(a&b));
1
a&b的结果是:128

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

例子2

1
1&2
1
0

“1”的二进制为:00000001
“2”的二进制为:00000010
结果为:00000000 = 0

|(或)

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

例子1

1
2
3
int a=129;
int b=128;
System.out.println("a|b的结果是:"+(a|b));
1
a|b的结果是:129

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

例子2

1
5|6

console

1
7

“5”的二进制为:00000101
“6”的二进制为:00000110
结果为:00000111 = 7

^(异或)

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

例子1

1
2
3
int a=15;
int b=2;
System.out.println("a^b的结果是:"+(a^b));
1
a^b的结果是:13

“a”的值是15,转换成二进制为1111
“b”的值是2,转换成二进制为0010
根据异或的运算规律,相同则结果为0,不同则结果为1,可以得出其结果为1101,即13。

例子2

1
23 ^ 12
1
27

“23”转换为二进制为:00010111
“12”转换为二进制为:00001100
计算结果为:00011011 = 27

~(非)

非运算符用符号~表示,其运算规律如下:如果位为0,结果是1,如果位为1,结果是0。

例子1

1
2
int a=2;
System.out.println("~a的结果是:"+(~a));
1
~a的结果是:-3

“2”的二进制码为00000010, 它取反为11111101,可见取反后结果为负数。补码值:11111101(Java按照补码进行存取)
非运算(~):去反得到00000010然后+1得到00000011,得到的结果为3 ,然后在前面加上负号就可以了,所以结果为-3。

位置交换

无需临时变量,替换两个变量的值,效率最高。

1
2
3
4
5
6
7
8
public static void main(String[] args) {
int a = 1, b = 2;
a = a ^ b;
b = b ^ a;
a = a ^ b;
System.out.println("a=" + a);
System.out.println("b=" + b);
}

1
2
a=2
b=1
# Java

评论

Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×