Less than 1 minute
x%2
→x&1
:位运算&
比取模%
运算快if((2&1) == 0)
m = (a+b) / 2
→m = (a + b) >>> 1
:防溢出商模
如果除数是 2 的 n 次方, 那么被除数的后 n 位即为余数 (模)。求被除数的后 n 位方法: 与 2^n-1 按位与
int a = 15; int b = 8; // 除数是 2 的 n 次方 System.out.println(a / b); System.out.println(a >>> 3); System.out.println(a % b); System.out.println(a & (b-1));
int上限
// 返回long,而不是Long long i = Integer.toUnsignedLong(123);
求大于等于的2^n,比如,7→8,8→8
int x = 8; // 方法1:x-1是因为x本身是2的幂时,不需要再加1 int e = (int)(Math.log10(x - 1)/Math.log10(2)) + 1; int result = 1 << e; System.out.println(result); // 方法2:位运算 x--; x |= x >> 1; x |= x >> 2; x |= x >> 4; x |= x >> 8; x |= x >> 16; x++; System.out.println(x);