이전까지의 1~7장을 모두 기억에 담으로 애쓰지 않아도 좋습니다. 학습은 뭐니뭐니해도 반복이 중요한거니까. 하다보면 익숙해지고 익숙하면 자기도 모르게 만들고 있게 됩니다.
위와 같이 설치합니다. 결과값은 어디에, 몇으로 표시될까요?
정답은 폼 이름에, 12로 표시됩니다. 분명, 폼캡션에 1과 2를 더한 3을 표시하라고 한것.. 같은데?
아닙니다. 폼1캡션에 텍스트1의 문자, 텍스트2의 문자를 더한 값을 대입한겁니다. 1과 2를 숫자가 아닌 문자로 취급하기 때문에 일어나는 일입니다.
[1]과 [2]가 아니라 [안녕]과 [하세요]였다면, [안녕하세요]라고 나오게 됩니다.
해결방법은? 간단합니다. 값에 value라는 예약어를 붙여주면 되죠. 형식은 이렇습니다.
Private Sub Form_Load()
Form1.Caption = val(Text1.Text) + val(Text2.Text)
End Sub
간단하죠? 이제 3으로 잘 나옵니다. 종류를 알아보겠습니다.
산술연산자와 비교연산자
a = 10
b = 2
번호 |
수식 |
설명 |
1 |
a + b |
더하기(숫자) 12 |
2 |
a & b |
더하기(문자열) 102 |
3 |
a - b |
빼기 8 |
4 |
a * b |
곱하기 20 |
5 |
a / b |
나누기(소수점 포함한 몫) 5 |
6 |
a \ b |
나누기(소수점 없는 몫) 5 |
7 |
a ^ b |
제곱 100 |
8 |
a mod b |
나머지 0 |
9 |
a < b |
작음 False |
10 |
a <= b |
작거나 같음 False |
11 |
a > b |
큼 True |
12 |
a >= b |
크거나 같음 True |
13 |
a <> b |
다름 True |
14 |
a = b |
같음 False |
15 |
a is b |
같음 False |
논리연산자에서는 2진 개념을 알아야 합니다. 컴퓨터는 0과 1로만 이루어져있습니다. 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 까지 10개의 숫자를 10진수, 조합해 숫자를 만드는방법을 10진법이라고 합니다. 그럼 2진수와 2진법은 뭘까요. 그렇습니다. 숫자 2개 즉 0과 1만으로 숫자나 문자를 표현하는것을 2진법이라고 합니다.
그럼 10진법으로 만들어진 숫자를 2진법으로 바꿔 읽어보도록 하겠습니다.
10진수 7은 2진수 0111입니다.
7을 2로 계속 나누면 몫이 3.5가 되어버리는데, 이렇게 마치지 않고 몫을 다시 나누다보면 몫이 0이되는데, 여기서 사용된 나머지를 역순으로 읽으면 2진수가 됩니다.
그리고 논리연산자의 종류를 알아보겠습니다.
번호 |
수식 |
설명 (1 = True / 0 = False) |
1 |
a and b |
앞뒤의 비교값이 모두 1인 경우 1을 반환합니다. |
2 |
a or b |
비교값 가운데 어느 하나라도 1이면 1을 반환합니다. |
3 |
not a |
값을 반대로 반환합니다. |
4 |
a xor b |
비교값의 자리가 같으면 0 다르면 1을 반환합니다. |
5 |
a eqv b |
비교값의 두 식 값이 같으면 1을 반환합니다. |
6 |
a imp b |
비교값의 앞의 식이 1이고 뒤의 식이 0인 경우 0를 반환합니다. |
1. AND 연산자 (비교값인 a와 b가 1인 경우 1을 반환합니다.)
a = 1 1 0 1 0
b = 0 1 1 0 1
-----------
c = a and b
c = 1 1 1 1 1
2. OR 연산자 (비교값 가운데 어느 하나라도 1이면 1을 반환합니다.)
a = 1 1 0 1 0
b = 0 1 1 0 1
-----------
c = a or b
c = 1 1 1 1 1
3. not 연산자 (값을 부정하는 값을 반환합니다.)
a = True
--------
not a
a = False
4. xor 연산자(비교값의 값이 같으면 0 다르면 1을 반환합니다.)
a = 1 1 0 1 0
b = 0 1 1 0 1
-----------
c = a xor b
c = 1 0 1 1 1
5. eqv 연산자(비교값 a와 b의 값이 같으면 1을 반환합니다.)
a = 4 = 4 (값이 같으므로 True)
b = 4 > 2 (4가 크므로 True)
---------
c = a eqv b (True, True이므로 True)
c = True
6. imp (비교값의 앞의 식이 1이고 뒤의 식이 0인 경우 0를 반환합니다.)
a = 4 = 4 (값이 같으므로 True)
b = 4 < 2 (2가 크지않고 4가 크므로 False)
---------
c = a imp b (True, False이므로 False)
c = False
비교연산자2
번호 |
수식 |
설명 |
1 |
a like b |
a에서 b를 찾아냅니다. |
번호 |
수식 |
설명 |
|
1 |
* |
모두 포함합니다. |
|
2 |
? |
하나의 문자를 포함합니다. |
|
3 |
# |
하나의 숫자를 포함합니다. |
|
4 |
! |
아닙니다. |
|
5 |
- |
에서 까지 |
|
6 |
[] |
문자를 포함합니다. |
1. * (모두 포함합니다.)
a = "연산자"
b = "연산*"
-----------
c = a like b
c = True
쉽게 말해서 [*부분을 뭐든 좋으니 채워라] 정도가 되겠습니다. a의 값이 연산군이어도 True를 반환하죠.
a = "동해물과 백두산이 마르고 닳도록 하느님이 보우하사 우리나라 만세"
b = "동해*만세"
-----------
c = a like b
c = True
*은 문자열의 길이나 위치를 따지지 않습니다.
a = "연산자"
b = "연"
-----------
c = a like b
c = False
a = "연산자"
b = "연산자"
-----------
c = a like b
c = True
다만 비교값 b의 값은 a와 같지 않을 경우 수식 없이 단독으로 사용할 수 없습니다.
a = "동해물과 백두산이 마르고 닳도록 하느님이 보우하사 우리나라 만세"
b = "동*물"
-----------
c = a like b
c = False
또한 수식을 넣더라도 b로 a의 모든 문자열을 찾아야만 합니다.
2. ? (하나의 문자열만 찾습니다.)
a = "티스토리"
b = "티스?리"
-----------
c = a like b
c = Truea = "티스토리"
b = "티?리"
-----------
c = a like b
c = False
*과 다르게 ?은 문자열의 길이를 따져서 단 한글자만 찾습니다.
a = "티스토리"
b = "티??리"
-----------
c = a like b
c = True
True를 반환하려면 이렇게하면 됩니다. 응용을 얼마나 잘하느냐에 따라서 프로그램의 질이 확실히 달라질것입니다.
3. # (하나의 숫자만 찾습니다.)
a = 4321
b = 4#21
-----------
c = a like b
c = True4021 4121 4221 4321 4421 4521 4621 4721 4821 4921 모두 True를 반환합니다.
4. ! (아닙니다.)
a = "피카추"
b = "피카[!츄초쵸츠]"
-----------
c = a like b
c = True6번 []와 함께 사용합니다. 꺽쇠괄호안에 있는 문자열을 포함하지 않을경우 True를 반환합니다. 특정 합성어를 피하고 싶을때 사용하면 좋겠습니다. 피카소라고 하면 True를 반환해버리기 때문이죠.
5. - (에서 까지)
a = "S"
b = "[A-Z]"
-----------
c = a like b
c = Truea "S"에서 b의 "ABCDEFGHIJKLMNOPQRSTUVWXYZ"를 찾습니다.
a = "S"
b = "[a-z]"
-----------
c = a like b
c = False
대소문자를 구별하기 때문에 유의하셔야 합니다.
a = "S"
b = "[A-z]"
-----------
c = a like b
c = True그럼 이렇게 넣어주면 되죠. "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghkjklmnopqrstuvwxyz"를 찾습니다.
a = "c"
b = "[A-b]"
-----------
c = a like b
c = False
이러면 "ABCDEFGHIJKLMNOPQRSTUVWXYZab"까지만 찾기 때문에 0을 반환합니다.
6. [] (문자를 포함합니다.)
4번과 5번에서 이미 사용했습니다.