用于增加位大小的有效条件

R..*_*R.. 3 c algorithm bit-manipulation

假设我有一个递增的无符号整数序列C[i].随着它们的增加,它们可能会占据越来越多的位.我正在寻找一个有效的条件,纯粹基于序列的两个连续元素C[i]C[i+1](过去和未来的元素是不可观察的),每次所需的位数增加时,它将精确地或近似地评估为真.

条件的一个明显(但缓慢)的选择是:

if (ceil(log(C[i+1])) > ceil(log(C[i]))) ...
Run Code Online (Sandbox Code Playgroud)

以及使用特殊cpu操作码计算前导零位数的任何事情(更好但仍然不是很好).

我怀疑可能有一个很好的解决方案涉及一个表达式,只使用按位或按位和值C[i+1]C[i].有什么想法吗?

Kei*_*all 16

假设你的两个数字是x和y.如果它们具有相同的高阶位,则x ^ y小于x和y.否则,它高于两者中的一个.

所以

v = x^y
if (v > x || v > y) { ...one more bit... }
Run Code Online (Sandbox Code Playgroud)

  • 优秀!因为他已经知道`C [i + 1]`>`C [i]`,然后`if((C [i + 1] ^ C [i])> C [i]){/*位已经改变了*/}` (3认同)