求一个正整数num的二进制形式 有多少位?

来源:百度知道 编辑:UC知道 时间:2024/07/05 01:59:30
举例: 数字8
二进制为1000
共有4位。

数字20
二进制为1 0100
共有5位。

我自己想的是,将num >>1 ,看它是否为零,不为零继续右移。
移动几次就是几位。
不知道是否有什么简便的方法,征求思路。
还有左移寻1,右移判0,除2判0,求2对数等。
这都算是同类方法。
希望能见到 耳目一新的答案。
有巧妙思路的,另外追分。

先定义一个变量存储长度,sum = 0;将sum / 16,如果结果为0,
{
判断是否 = 1, if(真)
sum += 1;
else if(sum < 4)
sum += 2;
else if(sum < 8)
sum += 3;
else
sum += 4;
}
如果不为1,sum += 4;sum /= 16;
继续循环,只到sum / 16 == 0;然后执行上述操作.

这样因该是消耗时间最少的了

#include<iostream>
using namespace std;
int main()
{
int a,sum = 0;
cin >> a;
while(a / 16 != 0)
{
sum += 4;
a /= 16;
}
if(a == 1)
sum += 1;
else if(a < 4)
sum += 2;
else if(a < 8)
sum += 3;
else
sum += 4;

cout << sum << endl;
return 0;
}

求以2为底num的对数,然后取整数部分再加1就是二进制的位数,编程如下:

//---------------------------------------------------------------------------

#include <stdio.h>
#include <math.h>

int BIN_len(int num)/*返回十进制数num的二进制位数*/
{
return ((int)(log(num