0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Goで2進数の0,1の数を数えたい

Posted at

結論

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 パッケージを使用したため記事にしてみました。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?