結論
math/bits
パッケージの
- TrailingZeros()
- LeadingZeros()
- OnesCount()
を使うと簡単に分かります。
背景
競技プログラミングで、2進数の末尾の0の数を求める問題を解いた際に
便利な公式パッケージがありましたので紹介します。
どう使うの?
var n uint16 = 16 // 10000(2進数)
// お尻から0がいくつ続くか
fmt.Println(bits.TrailingZeros16(n))
// 頭から0がいくつ続くか
fmt.Println(bits.LeadingZeros16(n)) // 0000 0000 0001 0000(2進数)
// ビットが1の数を求めたい場合
fmt.Println(bits.OnesCount16(n))
uint型のbit数に応じて関数名が変わります。
(uint型の場合、bits.TrailingZeros)
その他
(本題とは関係ありませんが) bitを逆順にする関数も便利そうですね。
// 2進数の逆順を出力する
fmt.Println(bits.Reverse16(n)) //0000 1000 0000 0000(2進数)
終わりに
公式パッケージですが、実務では2進数を扱う機会がなく、
今回初めて math/bits
パッケージを使用したため記事にしてみました。