位运算进阶操作
1、判断奇偶
public void isOddOrEven(int n){
if ((n & 1) == 1) {//n是奇数
System.out.println("Odd");
}else {//n是偶数
System.out.println("Even");
}
}
2、省去中间变量交换两整数的值(据说面试常考)
public void swap(){
int a = 1, b = 2;
a ^= b;
b ^= a;//b == 1
a ^= b;//a == 2
System.out.println("a:" + a);//a:2
System.out.println("b:" + b);//b:1
}
3、变换符号,正变负,负变正
public void negate(){
int a = -10, b = 10;
System.out.println(~a + 1);//10
System.out.println(~b + 1);//-10
}
4、求绝对值
public int abs(int a){
int i = a >> 31;//得到符号位,0 为正数,-1 为负数
return i == 0 ? a : (~a + 1);//符号位为 0 直接返回,否则返回 ~a + 1
}
5、判断一个数num是不是 2 的幂
fun isPowerOfTwo(num: Int): Boolean {
if (num < 1){
return false
}
return num.and(num - 1) == 0
}
6、判断一个数num是不是 4 的幂
fun isPowerOfFour(num: Int): Boolean {
if (num < 1){
return false
}
return (num.and(num - 1) == 0 && Integer.toBinaryString(num).length.and(1) == 1)
}
发表评论: