位运算
位运算
指的是二进制位的运算,先将十进制数转成二进制后再进行运算;在二进制位运算中,1表示true,0表示false
- 位与:& 遇false则false, 数学上的运算符为AND
- 位或:| 遇true则true, 数学上的运算符为OR
- 位异或:^ 相同为false,不同为true,数学上的运算符为XOR
- ~取反:全部取反,0变1,1表0(也包括符号位)
位移运算符
左移运算符:二进制左移,符号位丢弃,右边补齐0;
- 规律:向左移动几位,就是乘以2的几次幂。如 12 << 2; 结果48.
。
右移运算符:二进制右移,使用符号位进行补位;(符号位是什么就用什么补位)
- 规律:向右移动几位,就是除以2的几次幂。
无符号位右移:无论符号位是0还是1,都补0
案例:交换两个数据(不使用第三方变量)
int a = 10;
int b = 20;
a = a ^ b; // a = 10 ^ 20
b = a ^ b; // b = 10 ^ 20 ^ 20 一个数被其他数异或两次,该数本身不变,此时的值为10
a = a ^ a; // a = 10 ^ 20 ^ 10
案例:数组反转。
int arr = {11, 22, 33, 44};
for (int start = 0, end = arr.length - 1; start < end; start++, end--){
int temp = arr[start];
arr[start] = arr[end];
arr[end] = temp;
}