【发布时间】:2017-09-17 21:00:52
【问题描述】:
这是一个众所周知的函数,用于计算正参数的下一个最接近的 2 次幂。但是,我没有太多经验来探索它背后的逻辑/理论。您能解释一下为什么以及如何工作吗?特别是,选择 1,2,4,8,16 进行移位,如果参数的范围更大,那么将使用什么,例如,long?为什么是逻辑移位而不是算术移位,最后,ORing 移位 arg 完成了什么?
static int lowestPowerOfTwoGreaterThan(int arg) {
arg |= (arg >>> 1);
arg |= (arg >>> 2);
arg |= (arg >>> 4);
arg |= (arg >>> 8);
arg |= (arg >>> 16);
return ++arg;
}
【问题讨论】:
-
您可以选择一些小的随机数字。用二进制写...自己算算...
-
谢谢,我做到了,但看不出这种概括的模式。顺便说一句,我希望你没有改变标题。这不是要求一种计算方法,而是要求该函数如何工作。这里也没有掩蔽。
-
欢迎edit你的问题来纠正我犯的任何错误
标签: java bit-manipulation