PRIMG0001
 毎週金曜日、プログラミングのちょっとした講座を記しています。
 ここでは、小学校から「プログラミング」が必須項目になってしまったため、お父さん・お母さん・おじいちゃん・おねえちゃんが子供に「プログラミング」教えることができるように、ここでこっそりと勉強してしまおうという企画です。
 今週は「ビット演算」について説明していきます。
ビット演算は論理演算子を2 進数で考えて、各桁ごとに 0 を False、1 を True として処理をすることです。論理演算子は以前のVer2【算術演算子】で説明しております。

 論理演算子で、論理積はどちらの条件にも当てはまるのが条件になります。(AかつB)論理和はどちらかの条件に当てはまっていることです。(AまたはB)、論理否定は、どちらの条件にも当てはまらない(Aでもないし、Bでもない)という意味です。

演算子説明得られる結果
And論理積6 > 4 And 5 < 3False
Or論理和8 > 5 Or 4 <= 3True
Not論理否定Not  ( 4 > 3 And 10 = 9 )False

 この他に、ビット演算では「排他的論理和」(Xor)」という演算子があり、AとBどちらかが1の場合、結果がTrueとなるものもあります。これをビット演算に当てはまると次のようになります。


演算子 演算名 使用例 結果
And 論理積 1 And 1 1
1 And 0 0
0 And 0 0
Or 論理和 1 Or 1 1
1 Or 0 1
0 Or 0 0
Not 論理否定 Not 1 0
Not 0 1
Xor 排他的論理和 1 Xor 1 0
1 Xor 0 1
0 Xor 0 0

この上の結果を覚えておいてください。ここから少々難しくなりますので頑張ってください。

Sub rensyu01()

 Dim A as integer
 Dim B as integer
 Dim C as integer 

 A = 3
 B = 6
 C = A and B
End Sub


上のプログラムを実行した場合、Cには何の値が入りますでしょうか?答えは「2」が代入されます。
これについて説明していきます。

Aを2進数で表すと 0010
Bを2進数で表すと 0110

And の場合
左1桁目 Aの場合 0 Bの場合 0 よって 論理積 0
左2桁目 Aの場合 0 Bの場合 1 よって 論理積 0
左3桁目 Aの場合 1 Bの場合 1 よって 論理積 1
左4桁目 Aの場合 0 Bの場合 0 よって 論理積 0

よって2進数「0010」となり、10進数で「2」となります。

Sub rensyu01()
 Dim A as integer
 Dim B as integer
 Dim C as integer 
 A = 3
 B = 6
 C = A or B
End Sub
or の場合
左1桁目 Aの場合 0 Bの場合 0 よって 論理和 0
左2桁目 Aの場合 0 Bの場合 1 よって 論理和 1
左3桁目 Aの場合 1 Bの場合 1 よって 論理和 1
左4桁目 Aの場合 0 Bの場合 0 よって 論理和 0

よって2進数「0110」となり、10進数で「4」となります。


Sub rensyu01()
 Dim A as integer
 Dim B as integer
 Dim C as integer 
 A = 3
 B = 6
 C = A Xor B
End Sub
Xor の場合
左1桁目 Aの場合 0 Bの場合 0 よって 排他的論理和 0
左2桁目 Aの場合 0 Bの場合 1 よって 排他的論理和 1
左3桁目 Aの場合 1 Bの場合 1 よって 排他的論理和 0
左4桁目 Aの場合 0 Bの場合 0 よって 排他的論理和 0

よって2進数「0110」となり、10進数で「4」となります。


最後に
Sub rensyu01()
 Dim A as integer
 Dim B as integer
 Dim C as integer 
 A = 3
 B = 6
 C = A And Not B
End Sub


Aを2進数で表すと 0010
Bを2進数で表すと 0110 しかしNotなのでビットが反転となり1001

And の場合
左1桁目 Aの場合 0 Bのビット反転の場合 1 よって 論理積 0
左2桁目 Aの場合 0 Bのビット反転の場合 0 よって 論理積 0
左3桁目 Aの場合 1 Bのビット反転の場合 0 よって 論理積 0
左4桁目 Aの場合 0 Bのビット反転の場合 1 よって 論理積 0


よって2進数「0000」となり、10進数で「0」となります。


本日はここまでとなります。