美文网首页数据结构&算法&人工智能
判断一个数是否是2的幂次方,并求其以2为底的对数

判断一个数是否是2的幂次方,并求其以2为底的对数

作者: 零岁的我 | 来源:发表于2020-05-14 21:26 被阅读0次

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;
}
实验结果截图

相关文章

网友评论

    本文标题:判断一个数是否是2的幂次方,并求其以2为底的对数

    本文链接:https://www.haomeiwen.com/subject/cqzxohtx.html