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

제품:   Excel 버전:   공통
검색어:   논리값, true, false
제목:   True에 대한 진실게임
     
 

New Page 2
  STEP> 따라하기


프로그래밍 언어를 배울 때 또는 다 배우고 나서 종종 헷갈리는 것이 True False입니다. 값으로 따지면 False 0이고 0이 아닌 다른 수는 True라고 배웠습니다. 대개의 경우 이러한 생각은 큰 문제가 없습니다. 저 역시 남들한테 그렇게 들어왔고 그렇게 말해 왔습니다.

그러면 다음의 문제를 한번 생각해보도록 할까요?
a=1
b=2
이 있습니다. 그러면 변수 a와 변수 b AND 연산을 하면 어떤 결과를 가져 올까요?

변수 a b는 모두 0이 아닌 값을 가지므로 TRUE입니다. 그러면 이 둘을 AND연산으로 묶어버리면 당연히 TRUE가 나와야 합니다. 논리곱에서 양변이 TRUE일 때 전체 평가식이 TRUE가 되기 때문이죠.

Sub TrueTest()
    Dim a As Long
    Dim b As Long

    a = 1
    b = 2

    If a And b Then
        Debug.Print "a AND b is TRUE"
    Else
        Debug.Print "a AND b is FALSE"
    End If
End Sub

그러나 그 결과는 당황스럽게도 FALSE입니다. 왜 그럴까요?

프로그래밍 언어를 배우기 전에 컴퓨터에 대한 지식을 학교에서 배울 때 전구가 꺼지면 FALSE이고  전구의 빛이 켜져 있으면 TRUE라고 배웠습니다. 이것이 비트의 개념인데, 여기서 전구는 변수의 각 비트를 의미하겠죠. 그래서 정확하게는 변수의 모든 비트값이 0이면 FALSE입니다. 그리고 모든 비트의 값이 1(정수로는 -1)이면 TRUE가 됩니다. 0 FALSE이고 -1 TRUE라는 얘기가 됩니다. 

예를 들어 a=0이고 b=Not a 이면 다음과 같습니다.

a=0

0000000000000000

0

b=Not a

1111111111111111

-1

결국 위의 문제를 비트로 따져 각 비트를 AND연산하면 다음과 같습니다.

    a = 1
    b = 2

    If a And b Then

a=0000000000000001
b=0000000000000010
-----------------
0000000000000000
AND연산의 결과
전체가 0이므로 FALSE입니다.

비트 끼리  AND연산을 하면 각 비트는 0이 되고 전체적으로 위의 평가 식은 0이 되어 FALSE가 됩니다.

[참고]

비트연산과 관련하여 두 번의 데일리 팁이 있었습니다. 보시면서 이를 참고하시길 바랍니다.

1.홀짝, 간단하게 풀어보기, 어렵게 풀어보기

2.AND 연산자가 논리연산자인가?