剑指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)
清醒时做事,糊涂时读书,大怒时睡觉,独处时思考; 做一个幸福的人,读书,旅行,努力工作,关心身体和心情,成为最好的自己
-- 共勉