我最近读到了这样一个函数
public static int nearestPowerOfTwo(int number) {
--number;
number |= number >> 16;
number |= number >> 8;
number |= number >> 4;
number |= number >> 2;
number |= number >> 1;
++number;
return number;
}
我做了一组测试,这个函数似乎是找到离给出数字最近的2的x方。number |= number >> 16; 我理解是拿这个数的高16位和低16位去与(int总共32位) 以此类推... 不过还是没有弄明白为何这样就可以求出来 请高手指点。
public static int nearestPowerOfTwo(int number) {
--number;
number |= number >> 16;
number |= number >> 8;
number |= number >> 4;
number |= number >> 2;
number |= number >> 1;
++number;
return number;
}
我做了一组测试,这个函数似乎是找到离给出数字最近的2的x方。number |= number >> 16; 我理解是拿这个数的高16位和低16位去与(int总共32位) 以此类推... 不过还是没有弄明白为何这样就可以求出来 请高手指点。
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货