位运算————2的幂
Posted pacino12134
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了位运算————2的幂相关的知识,希望对你有一定的参考价值。
注意:
整数包括负数,别忘了负数!
2的幂肯定是大于等于1的,所以,负数全部false!!
方法1:
2的幂说明用二进制表示的时候,只有一个1。
1 class Solution 2 public: 3 bool isPowerOfTwo(int n) 4 if(n<=0) return false; 5 bitset<32> res(n); 6 if(res.count()==1) return true; 7 else return false; 8 9 ;
方法二:
利用与操作,若一个数n是2的幂次方,则2进制表达式一定为某一位为1,其余为0。则n-1则会变成后面的数全部变成1,原来1的位置变成0
例子:n=16的2进制(000010000),则n-1=15的二进制(00001111),则(n&n-1)=0。
注意:位运算优先级低于加减运算符。所有是先加减再与的,不用加括号了。
注意:等于==优先级是高于位运算符的,所以要在==之前加括号!!
1 class Solution 2 public: 3 bool isPowerOfTwo(int n) 4 if(n<=0) return false; 5 if((n&n-1)==0) return true;//注意运算符的优先级 6 else return false; 7 8 ;
以上是关于位运算————2的幂的主要内容,如果未能解决你的问题,请参考以下文章
LeetCode 231 2的幂[循环 递归 位运算] HERODING的LeetCode之路