码迷,mamicode.com
首页 > 其他好文 > 详细

位运算————2的幂

时间:2019-06-19 13:36:44      阅读:107      评论:0      收藏:0      [点我收藏+]

标签:个数   lse   else   class   次方   一个   说明   运算符   str   

技术图片

注意:

整数包括负数,别忘了负数!

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的幂

标签:个数   lse   else   class   次方   一个   说明   运算符   str   

原文地址:https://www.cnblogs.com/pacino12134/p/11050702.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!