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