/*
 * @lc app=leetcode.cn id=231 lang=c
 *
 * [231] 2的幂
 *
 * https://leetcode-cn.com/problems/power-of-two/description/
 *
 * algorithms
 * Easy (44.38%)
 * Total Accepted:    13.8K
 * Total Submissions: 31.2K
 * Testcase Example:  '1'
 *
 * 给定一个整数,编写一个函数来判断它是否是 2 的幂次方。
 * 
 * 示例 1:
 * 
 * 输入: 1
 * 输出: true
 * 解释: 2^0 = 1
 * 
 * 示例 2:
 * 
 * 输入: 16
 * 输出: true
 * 解释: 2^4 = 16
 * 
 * 示例 3:
 * 
 * 输入: 218
 * 输出: false
 * 
 */
bool isPowerOfTwo(int n) {
    if(n<=0 || n>2147483647)//2的幂最小是1  int最大为2147483647           
     return false;        
     while(n>1){            
         if(n%2!=0) return false;           
          n /=2;        
        }        
    return true;
}

如果除2有余数的话那肯定就不是了。

还看到大佬写的一句话:

 return log(n)/log(2)==(int)(log(n)/log(2));

但是这个 到了2的三十次方 就不对了 就差这一个 不知道为什么。

#
# @lc app=leetcode.cn id=231 lang=python3
#
# [231] 2的幂
#
# https://leetcode-cn.com/problems/power-of-two/description/
#
# algorithms
# Easy (44.38%)
# Total Accepted:    13.8K
# Total Submissions: 31.2K
# Testcase Example:  '1'
#
# 给定一个整数,编写一个函数来判断它是否是 2 的幂次方。
# 
# 示例 1:
# 
# 输入: 1
# 输出: true
# 解释: 2^0 = 1
# 
# 示例 2:
# 
# 输入: 16
# 输出: true
# 解释: 2^4 = 16
# 
# 示例 3:
# 
# 输入: 218
# 输出: false
# 
#
class Solution:
    def isPowerOfTwo(self, n: int) -> bool:
         return (n>0) and (n & (n-1))==0

这里 &进行与 运算,如果是2的幂的话,比如4, 4是 0100 3是0011   2是 0010   与运算结果为0 才是2的幂 不为0则不是