剑指offer--面试题10--相关

题目一:判断一个整数是不是2的n次幂

实现大概如下:

int main()
{
    int a = 256;
    if((a&(a-1)) == 0)  //重要!!
        std::cout<<"YES!"<<std::endl;
    else
        std::cout<<"No!"<<std::endl;
    return 0;

}

题目二:

输入整数m和n,计算由m得到n时需改变二进制位的个数。

思路:先m|n(异或);再用上篇博客中的方法统计异或结果二进制中1的个数即可。

 

重点理解+记住:

一个整数(包括负数)减一后再与原来的整数做位与(&)运算,得到的结果相当于将原来整数二进制表示中最右边的1置为0 !!!

例如:整数n,相应操作为n&(n-1)

posted on 2013-08-10 12:13  -赶鸭子上架-  阅读(112)  评论(0编辑  收藏  举报