我必须计算一个整数的二进制表示形式的长度。
我已经尝试过这样的事情:
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;
}