我必须计算一个整数的二进制表示形式的长度。
我已经尝试过这样的事情:

int binaryLength(int n)
{
      int i = 32;
      while (i > 0)
      {
           if (n >> i & 1) break;
           else i--;
       }
       return i;
 }


但是当我的数字像9(1001)时,此函数返回32。

最佳答案

如果我是你,我会放弃循环方法。

这是我所知道的最快方法-专为32位int编码。它不适用于负整数(无论如何,负整数的位模式取决于平台)。为64位int添加额外的一行;该方案应该很明显。

int binaryLength(int n)
{
    int i = 0; // the minimum number of bits required.
    if (n >= 0x7FFF) {n >>= 16; i += 16;}
    if (n >= 0x7F) {n >>= 8; i += 8;}
    if (n >= 0x7) {n >>= 4; i += 4;}
    if (n >= 0x3) {n >>= 2; i += 2;}
    if (n >= 0x1) {n >>= 1; i += 1;}
    return i;
}

07-24 09:46
查看更多