2005-11-18-01-【RPNToGo】第10回:ビットレベルの論理和演算子
>> Site top >> weblog >> 月別アーカイブ >> 2005年11月のlog >> 2005-11-18-01-【RPNToGo】第10回:ビットレベルの論理和演算子
最終更新日付:2005/11/18 01:00:00
【RPNToGo】第10回:ビットレベルの論理和演算子
2005 年 11 月 18 日
RPNToGo のテクニック紹介、10回目の今回は「論理和演算子」について解説をしていきます。論理積演算子との対応がわかりやすいように、前回と極力似せた記述でお送りします(手抜き? まぁそう言いなさんな)。
先日のビット演算子をひと巡りするエントリで説明したとおり、論理和は2項演算子で、2つの値の対応するビットがともに 0 であれば計算結果の対応するビットも 0 に、それ以外であればそのビットは1 になります。つまり、「少なくともいずれかが 1 なら 1、共に 0 なら 0」ということですね。以前は以下のような例を示しました。
10 : 1010 12 : 1100 |---------------- 1110
このことからわかるのは、「論理和は2つの値よりも小さくなることはない」ということです。論理和の計算結果が最大となるのは、2つの値の各ビットが互いに異なる時で、結果は2つの値の和になります。たとえば以下のように。
10 : 1010 5 : 0101 |---------------- 1111 ・・・ 15
逆に、計算結果が最小となるのは、2つの値が互いに等しい時で、結果は同じ値になります。たとえば以下のように。
10 : 1010 10 : 1010 |---------------- 1010 ・・・ 10
このように、ビットレベルの論理和演算子は、「値を増加させる」という目的で使用されるのが一般的です。では、いくつか面白い(と陰郎が思う)テクニックを紹介しましょう。
以前のエントリでも少し触れましたが、補数演算子はビット反転を行うため、ある値とその補数の論理和を計算すると、それは確実に -1 になります。これは論理和演算子が値を増加させないという意味で、例外的です。ここでは、10 とその補数である -11 で考えましょう。便宜上、ここでは 8 ビットで表現します。
10 : 00001010 -11 : 11110101 |---------------- 11111111 ・・・ -1
では次。論理和はその定義から、適当な数字と 0 で論理和を計算しても計算結果は元の値と変わりません。このことから、たとえば以下のようにしても値はそのままで Three card を実現できます。もちろん、 - の代わりに | をもうひとつ使ってもいいんですけどね。
5 5 5 - |
さらにもうひとつ。論理和は加算演算子と異なり、重複するビット分は数が増えませんから、たくさん使ってもそれほど値が増えることはありません。たとえば以下の計算結果は 7 になります。これなんて Straight で Four card ですね。
1 2 3 4 5 | | | |
...いかがでしょうか。ビット演算を効果的に使用できるようになると、数値を自由自在に扱うことができるようになります...などとまとめっぽいことを書きましたが、次回は「排他的論理和演算子」です。まだビットシフトも残ってますし、まだまだ続きますよ。それではまた次回。
コメント
このページのタグ
Page tag : Palm
Copyright(C) 2005-2021 project-enigma.
Generated by CL-PREFAB.