一.两个数组下标值arr[a],arr[b]交换
1.常规:
private static void swap1(int[] arr,int a,int b){
int temp = arr[a];
arr[a] = arr[b];
arr[b] = arr[a];
}
2.基于二进制异或运算^
private static void swap2(int[] arr,int a,int b){
arr[a] ^= arr[b];
arr[b] ^= arr[a];
arr[a] ^= arr[b];
}
原理:
基于运算器得到,运算速度很快。
例如arr[1]=9,arr[2]=20;
说明:不推荐异或运算做交换两数,原因:https://www.runoob.com/w3cnote/c-swap-data.html
二.求两个数的平均值
1.常规:
int NUM_A = 18 0000 0000
int NUM_B = 16 0000 3434
int MID_NUM = (NUM_A+NUM_B)/2
报错,超出int的存储空间
2,基于有无符号,右移,可以避免内存溢出。
int NUM_A = 18 0000 0000
int NUM_B = 16 0000 3434
int MID_NUM =NUM_B +((NUM_A-NUM_B)>>1) 【a>>1就是a除以2;a>>2就是a除以2^2】