繁体   English   中英

通过C中的直线位操作找到正整数的最高有效位或对数基数2(底)

[英]Find the most significant bit or log base 2 (floor) of a positive integer via straight line bit manipulation in C

这是我需要做的:

int lg(int v)
{
    int r = 0;
    while (v >>= 1) // unroll for more speed...
    {
        r++;
    }
}

我在以下位置找到了上述解决方案: http : //graphics.stanford.edu/~seander/bithacks.html#IntegerLog

这行得通,但是我需要在没有循环,控制结构或大于0xFF(255)的常量的情况下执行此操作,事实证明这对我来说很难找到。 我一直在尝试使用表格中的条件来解决问题

( x ? y : z ) = (((~(!!x) + 1)) & y) | ((~(~(!!x) + 1)) & z)

但我无法正常工作。 谢谢你的时间。

听起来像是一项作业。 好吧,如果您不能使用控制结构,一个不错的选择是预先计算您可以进行的工作:分而治之。 解决一小部分(一个字节,一个半字节,您选择),然后应用于整数部分。

没有任何控制结构,甚至没有?:运算符,您都可以模拟自己的算法

int r = 0;

x >>= 1;
r += (x != 0);
x >>= 1;
r += (x != 0);
...

前提是在C中

  • x假定为正(否则, int x=-1;例如x >>= 1 n次始终为!= 0
  • x != 0这样的条件将返回0( false )或1(* true)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM