【发布时间】:2011-11-16 08:29:02
【问题描述】:
Line 294 of java.util.Random source 说
if ((n & -n) == n) // i.e., n is a power of 2
// rest of the code
这是为什么?
【问题讨论】:
-
新标签应该是一个提示。 :)
-
跟随位。顺便说一句,它也将零视为 2 的幂。公式
(n & (n - 1)) == 0也有效(它会删除最低位,如果没有剩余位,则首先设置最多 1 个位)。 -
是的,我对使用这样的代码表示认罪。你可以玩很多这样的技巧,只要你知道你正在处理 2 的补码算术并保持对各种转换和溢出陷阱的认识。为了获得额外的功劳,请弄清楚如何四舍五入到下一个更高的 2 次方,或者可能是 2 的次方 - 1 - 在某些方面需要以惊人的频率完成的事情。
-
等等,现在 everyone 是从 java.util.Random 源读取的吗? (几个月前我读到了,从那时起我记得关于它的一些问题。)
标签: java logic bit-manipulation