Golang程序检查给定的正数是否为2的幂,是否不使用任何分支或循环

例子

考虑n = 16(00010000)

现在找到x = n-1 => 15(00001111)=> x&n => 0

解决这个问题的方法

步骤1-定义一个方法,其中n和是一个参数,返回类型为int。

步骤2-执行x = n&n-1。

步骤3-如果x为0,则给定数字为2的幂;否则,x为0。否则没有。

示例

package main
import (
   "fmt"
   "strconv"
)
func CheckNumberPowerOfTwo(n int) int {
   return n & (n-1)
}
func main(){
   var n = 16
   fmt.Printf("Binary of %d is: %s.\n", n, strconv.FormatInt(int64(n), 2))
   flag := CheckNumberPowerOfTwo(n)
   if flag == 0{
      fmt.Printf("Given %d number is the power of 2.\n", n)
   } else {
      fmt.Printf("Given %d number is not the power of 2.\n", n)
   }
}
输出结果
Binary of 16 is: 10000.
Given 16 number is the power of 2.