프로그래밍 언어를 배울 때 또는 다 배우고
나서 종종 헷갈리는 것이 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가 됩니다.
[참고]
|