Ruby 3-5

こんにちは!

今日は大阪ダービー!!!

ビット演算子

ビット演算子は2進数で表した時の各桁にて論理計算を行います。

bit.rb
Image from Gyazo

Image from Gyazo

簡単に説明します。
「&」 論理積、左右のビットが1のときだけ1、それ以外は0。
「|」 論理和、左右いずれかのビットが1のとき1、それ以外は0。
「^」 排他的論理和、左右のビットが異なれば1、それ以外は0。
「~」 否定、ビットを反転。
「<<」 ビットを左にシフト。
「>>」 ビットを右にシフト。

具体的に見ていきます。カッコ内は進数です。
10(10) & 1(10) → 1010(2) & 0001(2) → 0000(2) → 0(10)
10(10) | 1(10) → 1010(2) | 0001(2) → 1011(2) → 11(10)
10(10) ^ 1(10) → 1010(2) ^ 0001(2) → 1011(2) → 11(10)
10(10) << 1 → 1010(2) << 1 → 10100(2) → 20(10)
10(10) >> 1 → 1010(2) >> 1 → 0101(2) → 5(10)

否定演算子はすべてのビットを反転させますが、正負の符号の反転も考慮しなければいけません。
また、ビットで負数を表す場合「ビットを反転させて1を加えたものが、その絶対値になる」というルールがあります。
それを考慮すると以下のようになります。
~10(10) →~1010(2) → 0101(2) → -1010(2) → -1011(2) → -11(10)
2進数に直し、反転させ、負数を表すためにさらに反転し、1を加え、10進数に戻しています。

ややこしいですね。。。
初学者はあまり利用する機会は多くないらしいですが、こういうものがあることは覚えておきます。

ではでは。