VB.NET ビット演算とは?

今回は「ビット演算」について解説します。

変数は、メモリ上に確保されます。
そのメモリの単位は、ビット、バイト、キロバイト等です。

例えば、Dim a As Byte と変数宣言すると、
1バイト分の領域がメモリ上に確保されます。

1バイトと言う事は、8ビットですね。

そして、a = 10 と言う処理を行うと、次のようにビットが配置されます。

変数a = 0の場合:0000 0000
変数a = 10の場合:0000 1010

要するにビット演算とは、このビットの計算の事です。

変数a = 10のような処理の場合は、
ビット自体は気にしなくても良く、
10と言う数字が大事なんですが、
ビット1つずつに意味を持たせたい場合があるので、
そういった時に使います。

ビット演算の種類

ビット演算には、AND(アンド)、OR(オア)、XOR(エックスオア)、
ビットの反転(補数)、シフトがあります。

AND(アンド)

ANDは、演算対象の両方のビットが1の時だけ結果が1になります。

値1値2演算結果
000
010
100
111

And演算のサンプル

a = &HF And &H55
       0000 1111
  And  0101 0101
------------------------------
       0000 0101 演算結果:&H05

AND演算の使いどころとしては、他のビットの値を変えずに
どこかのビットだけを0にしたい時などです。

スポンサーリンク

OR(オア)

ORは、演算対象のひとつだけでもビットが1の時は、結果が1となります。

値1値2演算結果
000
011
101
111

Or演算のサンプル

a = &HF Or &H55
       0000 1111
  Or   0101 0101
------------------------------
       0101 1111 演算結果:&H5F

OR演算の使いどころとしては、他のビットの値を変えずに
どこかのビットだけを1にしたい時などです。

XOR(エックスオア)

XORは、演算対象が異なる場合のみ、結果が1となります。

値1値2演算結果
000
011
101
110

XOR演算のサンプル

a = &HF Xor &H55
       0000 1111
  Xor  0101 0101
------------------------------
       0101 1010 演算結果:&H5A

XOR演算の使いどころとしては、他のビットの値を変えずに、
どこかのビットだけを反転させたい時などです。

ビット反転(補数)

ビット反転(Not)は、演算対象のビットを全て反転させます。

結果
01
10

ビット反転演算のサンプル

a = Not (&H5)
 Not 0000 0101
------------------------------
     1111 1010 演算結果:&HFA

これは、特に説明はいらないと思います。

シフト

シフト処理は、ビットをずらす処理です。

左シフト

左シフトは、その名の通り、ビットを左へずらす処理を行います。
左端のビットは切り捨てられ、右端のビットには、0が入ります。
左算術シフトと呼ばれます。

a = &H5 << 1 <-ずらす数を指定する。

0000 0101 << 1
------------------------------
0000 1010 演算結果:&H0A 右端のビットに0が新しくシフトイン

右シフト

右シフトは、その名の通り、ビットを右へずらす処理を行います。
右端のビットは切り捨てられますが、
左端のビットには、シフト前の最上位ビットがコピーされます。
右算術シフトと呼ばれます。

a = &H5 >> 1 <-ずらす数を指定する。

0000 0101 >> 1
------------------------------
0000 0010 演算結果:&H02 右端のビットは切り捨て

シフト処理には、次の関係が成り立ちます。

左に1ビットシフトすると、値が2倍となる。
右に1ビットシフトすると、値が1/2となる。



以上、ビット演算についての説明でした。