배움터  
  HOME > 배움터 > Daily Tip
Daily Tip

제품:   Excel 버전:   공통
검색어:   AND, 논리연산자
제목:   AND 연산자가 논리연산자인가?
     
 

새 페이지 1
  STEP> AND 연산자

필자는 지금도 남들에게 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바이트의 정보만을 가질 수 있습니다. 이것을 이진수로 풀어쓰면
0000000100000010입니다.

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 연산을 하게 되면가 됩니다.

  참고> 엑셀의 AND() 워크시트함수
엑셀의 And() 워크시트 함수는 비트연산자가 아닙니다. 말 그대로 논리연산자입니다.