1. 快速判断一个整数是不是2的幂次方
一个数如果是2的幂次方,则它的二进制表示中只有一个1,1后面其他位都是0,如果将这个数减去1,则其二进制表示中1对应的位置会变成0,1后面0对应的位置会变成1, 因此将原来的数与减去1后的数字进行与运算等于0。
即如果 n&(n-1)==0,则表示n是2的幂次方。
2. 求以2为底的对数
C/C++数学库只定义了e为底的对数函数,利用换底公式实现自定义底数的对数,换底公式如下:

实验代码:
#include<iostream>
#include<cmath>
using namespace std;
//C/C++数学库只定义了e为底的对数函数
//利用换底公式实现自定义底数的对数
//求以2为底的对数
int log2(int n)
{
return log(n)/log(2);
}
int main(int argc,char **argv)
{
int n=1;
int res=0;
//快速判断一个整数是不是2的幂次方
/*一个数如果是2的幂次方,则它的二进制表示中只有一个1,1后面其他位都是0,
如果将这个数减去1,则其二进制表示中1对应的位置会变成0,1后面0对应的位置会变成1,
因此将原来的数与减去1后的数字进行与运算等于0.
即 n&(n-1)==0,则表示n是2的幂次方。
*/
if(n&(n-1)){
cout<<n<<"不是2的幂次方"<<endl;
}
else{
res = log2(n);
cout<<res<<endl;
cout<<n<<"是2的"<<res<<"次方"<<endl;
}
return 0;
}

网友评论