任意给定一个32位无符号整数n,求其对应的二进制数长度。先举几个例子解释一下什么是二进制数的长度,比如8 = 1000,则长度是4, 7 = 0111,长度为3。所以一个二进制数的长度也即最高位1的下标值+1(下标从0开始)。题目很简单,下面提供三种方法
- 普通方法
- 递归法
- 二分搜索+查表
普通法
移位+计数,每移位一次,计数器加1,直到n为0
int
BitLength(unsigned
int
n)
{
int c = 0 ; // counter
while (n)
{
++ c ;
n >>= 1 ;
}
return c ;
}
{
int c = 0 ; // counter
while (n)
{
++ c ;
n >>= 1 ;
}
return c ;
}
运算次数,如果n的二进制长度为k,那么共有k次循环,最多循环32次。也可以用for语句写,省一行代码,但可读性差