필자는 지금도 남들에게 And 연산자를 논리연산자로
얘기하고 있지만 사실 And 뿐만 아니라 Or, Not 등등의 연산자는
비트연산자(bit-wise operator)입니다.
여러분이 비트연산을 모르고 있었고
‘난 비트연산을 사용한 적이 없다’고
해도 이미 비트연산을 해오고 있는 것입니다. 가령
‘MsgBox’함수에
‘vbYesNo+vbQuestion’을
사용했다면 이것은 비트연산을 한 것이죠.
비트 연산이 무엇인가? 비트
연산이란 byte(=8bit)의 각 bit단위로 연산하는 것입니다. 가령 다음과 같은 코드가 있다고
하죠.
Dim a As Byte
Dim b As Byte
a = 1
b = 2
Debug.Print a And b
a와 b는 모두 byte형 변수입니다. 그러므로 a와 b는 1바이트의 정보만을 가질 수 있습니다.
이것을 이진수로 풀어쓰면
‘00000001’과
‘00000010’입니다.
Debug.Print a And b
와 같이 And 연산을 하면
다음 그림과 같이 각 bit에서 And연산을 하게 됩니다. 그리고 결과는
‘00000000’입니다.
0 |
0 |
0 |
0 |
0 |
0 |
0 |
1 |
0 |
0 |
0 |
0 |
0 |
0 |
1 |
0 |
AND |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
물론 논리연산자의 입장에서 보면
‘0’이라는
값은 False값에 해당합니다. 따라서 And연산이 논리연산과 다를
바가 없습니다.
이번에는[직접 실행]창에서
‘? 10 and 3’을
입력하고 키를 눌러 보시죠. 여러분은
‘2’라는
결과를 얻을 것입니다. 이것 역시 논리연산자의 입장에서는
True값이 됩니다.
만일 And가 논리연산자라면
‘2’라는
결과 대신
‘True’라고
결과를 주어야 할 것입니다. 그러나 And와 그 친구들이 비록
내부적으로 비트연산을 하지만 논리연산에도 문제가 없으니 논리연산자라고 불러도 상관없을 겁니다.
그런데 비트 연산자가 어디에
쓰는 지 궁금하실 분도 계실 겁니다. 간단히는 Dir()함수의 도움말 예제에도 나옵니다. 또
VBA와는 관계없는 일이지만 비트연산은 그래픽 프로그래밍 분야에서 널리 사용됩니다.
가령 다음과 같은 픽셀(pixel)로
구성된 그림이 있다고 가정합니다. 각 검정색 픽셀(pixel)은
‘0’,
흰색 픽셀(pixel)은
‘1’입니다.
위의 두 개의 픽셀(pixel)
그림을 Or 연산을 하게 되면
가
됩니다.
위의 두 개의 픽셀(pixel)
그림을 And 연산을 하게 되면가
됩니다.
위의 두 개의 픽셀(pixel)
그림을 Xor 연산을 하게 되면가
됩니다. |