대입 | = |
대입연산자 오른쪽에 있는 값을 왼쪽에 대입한다. ex) num = 10; |
더하기 | + |
왼쪽의 값에 오른쪽의 값을 더한다. ex) num + 30; |
빼기 | - |
왼쪽의 값에 오른쪽의 값을 뺀다. ex) num - 20; |
곱하기 | * |
왼쪽의 값과 오른쪽의 값을 곱한다. ex) num * 5; |
나누기 | / |
왼쪽의 값을 오른쪽의 값으로 나눈다. ex) num / 7; |
나머지 | % |
왼쪽의 값을 오른쪽의 값으로 나눴을때 얻게되는 나머지를 반환한다. ex) num % 3; |
위와 같이 연산에 필요한 피연산자가 2개인 연산자를 가리켜 이항연산자 라고 합니다.
#include <stdio.h>
int main(void) {
int a = 11, b = 4;
printf("%d + %d = %d \n", a, b, a + b);
printf("%d - %d = %d \n", a, b, a - b);
printf("%d × %d = %d \n", a, b, a * b);
printf("%d ÷ %d = %d \n", a, b, a / b);
printf("%d ÷ %d 의 나머지 = %d \n", a, b, a % b);
return 0;
}
9항에서 보면 11÷4의 값이 2.75가 아닌 2로 값이 출력되는 것을 볼 수 있습니다.
C언어에서는 정수 와 정수를 나누기 하게 되면 값이 정수가 되며 이때 소숫점 이하의 값은 버려지게 됩니다.
10행에서 보이는 % 연산자는 나눗셈의 나머지 값을 구하는 연산자 이며, %연산자는 실수형 자료형 연산에는 사용할 수 없고 정수형 자료형 연산에서만 사용할 수 있습니다.
복합 대입 연산자란 2항 연산결과를 자신에게 대입하는 연산자 입니다.
다음과 같은 연산자가 있습니다.
+= | -= | *= | /= | %= | <<= | >>= | &= | ^= | |= |
#include <stdio.h>
int main(void) {
int a = 2;
int b = 4;
int c = 8;
a += 3; // a = a + 3 과 같음
b *= 4; // b = b * 4 과 같음
c %= 3; // c = c % 3 과 같음
printf("a = %d, b = %d, c = %d\n", a, b, c);
return 0;
}
복합 대입 연산자의 의미는 위의 코드에서 보듯이 a += 3; 일경우 a = a + 3; 과 같은 의미인 것을 이해할 수 있을 것입니다.
부호 연산자에는 +, - 가 있습니다.
+와 -는 이항연산자에서는 덧셈과 뺄셈을 의미하지만, 피연산자가 한개인 단항 연산자로는 부호를 나타냅니다.
#include <stdio.h>
int main(void) {
int a = +4; // 부호 연산자 +
int b = -7; // 부호 연산자 -
a = -a;
printf("a의 값 : %d\n", a);
b = -b;
printf("b의 값 : %d\n", b);
a += b; // 복합 대입연산 a = a + b; 와 같음
printf("복합대입연산 a += b 의 값 : %d\n", a);
return 0;
}
a = -a;과 b = -b;은 부호 연산자인 -연산을 하여 각 변수값의 부호가 바뀐것을 알 수 있습니다.
13행은 += 임으로 부호 연산이 아닌 복합 대입 연산자를 사용한 것입니다.
++num | 변수 num에 값을 1 증가 후, 속한 문장의 나머지를 진행 | (선 증가, 후 연산) |
num++ | 속한 문장을 먼저 진행한 후, 변수 num에 값을 1증가 | (선 연산, 후 증가) |
--num | 변수 num에 값을 1 감소 후, 속한 문장의 나머지를 진행 | (선 감소, 후 연산) |
num-- | 속한 문장을 먼저 진행한 후, 변수 num에 값을 1감소 | (선 연산, 후 감소) |
위의 표에서 보듯이 ++, -- 연산자는 이름 그대로 값을 1 증가 하거나 감소를 합니다.
그런데 증감연산자의 삽입된 위치에 따라 그 의미가 달라지는데
변수의 왼편에 붙는경우 (++num) 전위연산 이라 하고
변수의 오른편에 붙는경우 (num++) 후위연산 이라 하며
전위 연산의 경우 문장을 진행하기 전에 먼저 증감연산을 한 후 진행이 되고
후의 연산의 경우 문장을 다 진행한 후에 증감 연산을 합니다.
#include <stdio.h>
int main(void) {
int a = 5;
int b = 7;
printf("a = %d\n", a);
printf("a++ = %d\n", a++);// 후위연산
printf("a = %d\n\n", a);
printf("b = %d\n", b);
printf("--b = %d\n", --b); // 전위연산
printf("b = %d\n\n", b);
return 0;
}
관계연산자는 대소 와 동등의 관계를 따지는 연산자입니다.
< | ex) n1 < n2 n1이 n2보다 작은가? |
> | ex) n1 > n2 n1이 n2보다 큰가? |
== | ex) n1 == n2 n1이 n2와 같은가? |
!= | ex) n1 != n2 n1이 n2와 다른가? |
<= | ex) n1 <= n2 n1이 n2보다 작거나 같은가? |
>= | ex) n1 >= n2 n1이 n2보다 크거나 같은가? |
관계연산자는 조건을 만족하면 1, 만족하지 않으면 0을 반환합니다.
C언어에서 0은 false(거짓)을 의미하고 0을 제외한 모든 수는 true(참)을 의미합니다.
#include <stdio.h>
int main(void) {
int a = 10;
int b = 12;
int result1, result2, result3;
result1 = a == b;
result2 = a <= b;
result3 = a > b;
printf("result1 : %d\n", result1);
printf("result2 : %d\n", result2);
printf("result3 : %d\n", result3);
return 0;
}
조건을 만족하지 않으면 거짓(0)을 반환하고,
조건을 만족하면 참(1)을 반환합니다.
&& | ex) A && B A와 B가 모두 참이면 참(1)을 반환 (논리 AND) |
|| | ex) A || B A와 B중 하나라도 참이면 참(1)을 반환 (논리 OR) |
! | ex) !A A가 참일경우 거짓(0)을 반환, A가 거짓일경우 참(1)을 반환 (논리 NOT) |
#include <stdio.h>
int main(void) {
int a = 10;
int b = 12;
int result1, result2, result3;
result1 = (a == 10) && (b == 12); // 둘다 참임으로 1을 반환
result2 = (a < 12) || (b > 12); // (a < 12)보다 작음으로 b > 12
result3 = !a;
printf("result1 : %d\n", result1);
printf("result2 : %d\n", result2);
printf("result3 : %d\n", result3);
return 0;
}
result1은 둘다 모두 참이기 때문에 1
result2는 (a < 12) 참이기 때문에 1이며, (b > 12)는 연산하지 않습니다.
result3은 0이 아닌 모든 수(음수도 포함)는 참이기 때문에 0
조건 연산자는 3항 연산자이고 다음과 같은 형태를 갖습니다.
조건식 ? 참일때 실행할 코드 : 거짓일때 실행할 코드;
조건 연산자는 if else 문과 유사하고 단지 기호를 써서 간략히 표현할 수 있다는 장점이 있습니다.
조건식에 따라 분기하여 실행할 코드를 간략히 표현할 수 있습니다.
중첩해서 사용하면 가시성이 떨어질수 있습니다.
sizeof 연산자는 기본자료형에 설명하였듯이 자료형 또는 변수의 크기를 구하는 연산자 입니다.
포인터에서 다루게 될 *(간접지정 연산자), &(주소 연산자)
자료형 변환에 사용되는 () 명시적 형변환연산자 등이 있습니다.