Golang 程序对 2 的下一个幂向上舍入。

go programmingserver side programmingprogramming

示例

例如,n = 12 => 2 的上一个数字幂为 8。

例如,n = 20 => 2 的上一个数字幂为 16。

解决此问题的方法

步骤 1 − 定义一个接受数字 n 的方法。

步骤 2 − 执行 n | (n >> k),其中 k 为 1、2、4、8、16。

步骤 3 −最后返回 n - (n >> 1)。

示例

package main
import "fmt"
func PreviousPowOf2(n int) int{
   n = n | (n >> 1)
   n = n | (n >> 2)
   n = n | (n >> 4)
   n = n | (n >> 8)
   n = n | (n >> 16)
   return n - (n >> 1)
}
func main(){
   fmt.Printf("上一轮数,2 的幂为 %d\n", 20, PreviousPowOf2(20))
   fmt.Printf("上一轮数,2 的幂为 %d\n", 12, PreviousPowOf2(12))
   fmt.Printf("上一轮数,2 的幂为 %d\n", 131, PreviousPowOf2(131))
}

输出

上一轮数,2 的幂为 20 为 16
上一轮数,2 的幂为 12 为 8
上一轮数,2 的幂为 131 为 128

相关文章