leetcode:231. 2 的幂(位运算)

简介: leetcode:231. 2 的幂(位运算)

一、题目:

函数原型:bool isPowerOfTwo(int n)

二、思路:

根据题意,要判断一个数是否为2的幂。如果一个数是2的幂,那么该数的二进制表示中只有一个1。所以只需要将该数的二进制表示中的最低位1移除,判断剩下的是否为0。如果为0,则说明二进制中只有一个1;如果不为0,说明二进制中有多个1。

移除二进制中最低位的1的方法:

1.n&(n-1)移除最低位的1

假设n为  

那么n-1为00000000 10000000 00000000 01111111

n&(n-1)为00000000  10000000 0000000   0000000(移除了最低位的1)

2.n&(-n)得到最低位的1(移除除了最低位1的其他所有1)

假设n为00000000 10000000 00000000 10000000

那么-n为10000000 10000000 00000000 10000000(原码)

             11111111    01111111  11111111   10000000(补码)

n&(-n)为 00000000 00000000 00000000 10000000(补码)

              00000000 00000000 00000000 10000000(原码)

三、代码:

代码1

bool isPowerOfTwo(int n)
{
  if ((n & (n - 1)) == 0)
    return true;
  else
    return false;
}

代码2

bool isPowerOfTwo(int n)
{
  if ((n & (-n)) == n)
    return true;
  else
    return false;
}


目录
相关文章
|
6月前
|
机器学习/深度学习
常见位运算的总结
常见位运算的总结
59 0
|
7月前
[leetcode 数位运算] 2939. 最大异或乘积 M
[leetcode 数位运算] 2939. 最大异或乘积 M
|
存储 Java 程序员
“高端”的位运算
大家好,我是王有志。原计划迭代作为预备知识的收尾,不过在解2的幂和4的幂时,想到关于数字2的问题可以通过位运算去解决,因此补充了关于位运算的内容。
95 1
|
算法 Java 编译器
第 13 天_位运算
第 13 天_位运算
94 0
|
算法 数据安全/隐私保护
基本的位运算
基本的位运算
|
存储
位运算及A+B
位运算及A+B
104 0
|
存储 算法
【LeetCode】2的幂
【LeetCode】2的幂
103 0
【LeetCode】2的幂
|
机器学习/深度学习 算法
《LeetCode》位运算详解
《LeetCode》位运算详解
189 0
《LeetCode》位运算详解
|
存储
【位运算】怕位运算?有我你何足畏惧
【位运算】怕位运算?有我你何足畏惧
83 0
位运算的小技巧
快速学习位运算的小技巧

热门文章

最新文章