基础知识
&(与)
与运算符用符号&
表示,其使用规律如下:两个操作数中位都为1,结果才为1,否则结果为0。
例子1
1 2 3
| int a=129; int b=128; System.out.println("a&b的结果是:"+(a&b));
|
“a”的值是129,转换成二进制就是:10000001
。
“b”的值是128,转换成二进制就是:10000000
。
根据与运算符的运算规律,只有两个位都是1,结果才是1,可以知道结果就是10000000
,即128。
例子2
“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));
|
“a”的值是129,转换成二进制就是10000001
。
“b”的值是128,转换成二进制就是10000000
。
根据或运算符的运算规律,只有两个位有一个是1,结果才是1,可以知道结果就是10000001
,即129。
例子2
console
“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));
|
“a”的值是15,转换成二进制为1111
。
“b”的值是2,转换成二进制为0010
。
根据异或的运算规律,相同则结果为0,不同则结果为1,可以得出其结果为1101
,即13。
例子2
“23”转换为二进制为:00010111
。
“12”转换为二进制为:00001100
。
计算结果为:00011011 = 27
。
~(非)
非运算符用符号~
表示,其运算规律如下:如果位为0,结果是1,如果位为1,结果是0。
例子1
1 2
| int a=2; System.out.println("~a的结果是:"+(~a));
|
“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); }
|