안녕하세요.
c언어에는 다양한 연산자가 있습니다.
이미 몇가지는 알고계실것이고 이미 전 강좌에서도 나왔습니다.
대입연산자와 산술연산자입니다.
1.대입연산자
이런식으로 오른편에 있는것을 왼편에 대입한는것을 말합니다.
변수를 배울때 이미 봤던것이죠.
결합순서는 왼쪽 <- 오른쪽
결합순서는 어느곳부터 결합하냐를 말하는겁니다
오른쪽에서 왼쪽이기때문에
a = b = 10이 있을경우 오른쪽부터 진행해서
b = 10을 진행한 다음 a = b를 진행합니다.
대입연산자는 연산을 끝낸후에 그자리에 오른편에 있던 값이 남아있게됩니다. 즉
a = b = 10을 하면 b = 10을 하고 b의 자리에 10이 남아있게됩니다.
그래서 a = 10이 되고 a에도 10이 대입됩니다.
2.산술연산자
연산자 |
연산의 예 | 연산의 결과 |
의미 |
+ |
1 + 5 | 6 | 덧셈 |
- |
5 - 2 | 3 | 밸셈 |
* |
5 * 5 | 25 | 곱셈 |
/ |
10 / 2 | 5 | 나눗셈 |
% |
10 % 3 | 1 | 나머지 |
결합순서는 왼쪽 -> 오른쪽
연산을 끝낸후에 그 자리에 연산의 결과가 들어간다고 생각하시면 됩니다.
printf("%d", 3 + 5);를 출력할경우
3.기타 대입 연산자
단순히 대입연산자와 산술연산자를 합쳐놓은것이라 고 보면 됩니다.
덧셈으로 예를 들자면 다음과 같습니다
물론 덧셈뿐만 아니라 다른것들도 모두 됩니다.
4.증가 감소 연산자
연산자 | 예 | 의미 |
++ |
num++ ++num |
값 1 증가 |
-- |
num-- --num |
값 1 감소 |
++를 붙이면 값이 증가하고 --를 붙이면 감소합니다. 간단하죠.
근데 여기서 주의하실점이 있습니다.
연산자를 앞에붙이냐와 뒤에붙이냐에 따라서 순서가 달라집니다.
num++의 경우 먼저 증가하고 연산하는데
++num의 경우 연산 하고 증가합니다. 즉
이렇게 할경우 b의 값이 1 증가하고 a에 대입합니다.
출력결과는
a : 11
b : 11
이렇게됩니다. 하짐나 뒤에붙일경우에는 다르게되겠죠
출력결과는
a : 10
b : 11이 됩니다
5.관계연산자
컴퓨터는 모든 정보를 0과 1로 표현합니다.
참과 거짓도 1과 0으로 나눌수있죠
true (참)는 1이고 false (거짓)는 0입니다.
연산자 |
예 |
결과 |
의미 |
> |
5 > 3 |
true |
좌가 우보다 큰가 |
< |
5 < 3 |
false |
좌가 우보다 작은가 |
== |
5 == 5 |
true |
좌와 우가 같은가 |
!= |
5 !== 5 |
false |
좌와 우가 다른가 |
<= |
5 <= 6 |
true |
좌가 우보다 작거나 같은가 |
>= |
5 >= 5 |
true |
좌가 우보다 크거나 같은가 |
연산을 하고 그것이 참일경우 true ( 1 )이 되고 거짓일경우 false ( 0 )이 됩니다.
를 입력할경우 출력결과는
거짓일경우 0 참일경우 1이되어서 나오죠.
6.논리연산자
연산자 |
예 |
결과 |
의미 |
&& ( and ) |
true && true true && false false && false |
true false false |
두개 모두 참이여야만 참이됨. |
|| ( or ) | false || true false || true false || false | true false | 둘중 하나라도 참일경우 참이됨. |
! ( not ) |
!true !false |
false true |
참과 거짓을 거꾸로 바꿈 (false->true , true->false) |
논리연산자는 말로 해석하면 쉽습니다.
&& (and)의 경우 A 그리고 B가 참이다.
|| (or)의 경우 A 또는 B가 참이다.
이 말이 참일때 true가 되는겁니다.
! ( not )의 경우 A가 아니다.
즉 부정하는것이죠. 부정할경우 반대로 뒤집힙니다.
간단하게 예를들면
a = 8 > 5 && 7 > 5;
이렇게 입력할경우 8>5는 참이고 7>5도 참이기때문에 결국 a는 true ( 1 )가됩니다.
7.비트연산자
연산자 |
의미 |
& |
비트단위 AND |
| |
비트단위 OR |
^ |
비트단위 XOR |
~ |
비트단위 NOT |
<< |
왼쪽으로 비트 이동 |
>> | 오른족으로 비트 이동 |
저번에 변수를 배울때 비트를 배웠습니다
0000 0000
8개의 비트가 있는 이것이 1바이트입니다.
위의 배운 논리연산자의 비트버전이라고 보시면 됩니다.
예를 들어서 설명드릴게요.
A = 1100 1100
B = 1010 1010
A & B = 1000 1000 (둘다 1일경우에만 1이됨.)
A | B = 1110 1110 (둘중 하나라도 1이면 1이됨)
A ^ B = 0110 0110 (둘이 다를경우 1이됨)
~A = 0011 0011 (0과 1을 뒤집음)
A<<2 = 0011 0000 (2칸씩 왼쪽으로 이동)
A>>2 = 0011 0011 (2칸씩 오른쪽으로 이동)
이렇게됩니다.
<<,>>와 같이 이동하는 연산자를 시프트연산자 라고 하는데 그림으로 좀더 설명해드리겠습니다.
이런식으로 이동하게됩니다.
8.콤마연산자
콤마연산자는 연산이 목적이 아니라 구분을 목적으로합니다.
printf("안녕"), printf("친구들아");
이런식으로 한번에 두개의 문장을 쓸수있습니다.
int a = 0,b = 1; 이런식으로 둘이상의 변수선언도 가능하고요.
함수호출시에 인자를 구분할때도 사용됩니다.
콤마연산자를 사용시 둘 이상의 인자가 한문장에 들어갈때 두 인자는 구분되어 있는 인자입니다.
9.우선순위
연산자 우선순위 표입니다.
우리가 수학문제를 풀때도
5 + 2 x 3을 계산할때 곱셈을 먼저 계산하잖아요?
연산자에도 우선순위가 있는겁니다.
a = a + 5
여기에서 +가 우선순위가 높기때문에 먼저 a에 5를 더한후에 그것을 a에 대입하는겁니다.
'프로그래밍 > C 기초' 카테고리의 다른 글
[C언어 강좌] #8 - if문 else문 (0) | 2016.12.14 |
---|---|
[C언어 강좌] #7 - scanf , 메모리 주소 (0) | 2016.12.13 |
[C언어 강좌] #5 - 서식문자 (0) | 2016.12.11 |
[C언어 강좌] #4 - 자료형 (0) | 2016.12.11 |
[C언어 강좌] #3 - 변수란 무엇인가? (0) | 2016.12.10 |