我必须计算整数的二进制表示形式的长度。 我尝试过这样的事情:
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;
}
关于计算整数的二进制表示形式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40843839/