考虑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.