【Ruby】【アルゴリズム】ビット演算。1 になっているビット数を数える。
ビット演算・・ってアルゴリズムを考える上で便利かも。
と思って勉強してみる。
このサイトが、
どういうときにビット演算を使うと便利なのか、
が分かりやすく書いてあって面白かったです。
記念すべき1問目
レジスタ中の 1 になっているビット数を数えるアルゴリズム
を解いてみます。
ポイント:数値の渡し方
p 1101 & 10
■実行結果
8
はて?
そうか。最初の式は2進法だと認識されず
10001001101 & 1010
と認識されているのか。
ポイント:論理積の結果表示
たとえば、
p 0b1111 & 0b10
とすると「2」が表示される。
pメソッドは数値を10進法で表示するため。
2進法(ビット)のまま表示したいと思ったら
こうするしかないのか?
printf("%b",(0b1111 & 0b10))
うーん。。?
とってもやさしい師匠に聞いてみよう。
ビット数を数える
レジスタ中の 1 になっているビット数を数えるアルゴリズム
def numofbits1(bits) num = 0 mask = 1 while(mask != 0) do break if 1 << 31 == mask num += 1 if (bits & mask) != 0 #←オドロキ! mask <<= 1 end num end p numofbits1(0b10010101010101)
■実行結果
7
これがビット演算かー。