位运算进阶操作
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)
    }
 
 
 
 
        
发表评论: