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