一から勉強させてください

最下級エンジニアが日々の学びをアウトプットしていくだけのブログです

Rubyのビット演算子、論理演算子について

Ruby の論理演算子、ビット演算子についてメモ。

論理演算子

一番よく使うやつ。

Ruby論理積論理和ってtruefalseじゃなくてオペランドのどちらかを返す。短絡評価。(片方を評価して結果がわかったら、もう片方を評価せずに結果を返す)

論理積はどちらも真であることを期待するけど、例えば以下のような感じ。

nil && 1 #=> nil

nilを評価した時点でどちらも真である希望はなくなるので、この時点で心折れてnilを返す。

1 && nil #=> nil

とかであれば1を評価して真なので期待に胸をふくらませて次へ。 でもnilなので絶望にひたりながらnilを返す。

論理和の場合はどちらかが真であればいいので

nil || 1 #=> 1
1 || nil #=> 1

となる。

ビット演算子

個人的には普段、あまり使わないかも。

整数の2進表現をビットの列として演算を行う。

ビット積はどちらも 1 の場合のみ 1、それ以外は 0 になるので

1 & 2 #=> 0

となる。(1 は 2 進数で 01、2 は 2 進数で 10)

ビット和はどちらかが 1 なら 1 になるので

1 | 2 #=> 3

Array でビット演算子を使う場合

これ、最近まで知らなかったやつ。地味に使えそう。

Arrayには &|っていうメソッドが定義されてるぽい。Array.instance_methodsやったらちゃんとこいつら出てくる。

&は 2 つの配列を評価して重複する要素を新しい配列に入れて返す。イメージ通り。

[1, 2, 3] & [2, 4, 6] #=> [2]

|は 2 つの配列を合わせて、重複を取り除いてから返す。

[1, 2, 3] | [2, 4, 6] #=> [1, 2, 3, 4, 6]

まとめ

Arrayのビット演算子、積極的に使っていきたい。

参考