位运算进阶操作

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)
    }





标签: java
2023.6.9   /   热度:516   /   分类: java

发表评论:

©地球仪的BLOG  |  Powered by Emlog