이번에는 C언어에서의 연산자에 대해서 알아보겠습니다.
구 분 | 연산자 종류 |
대입 연산자 | = |
산술 연산자 | +, -, *, /, %, ++, -- |
관계 연산자 | <, >, <=, >=, ==, != |
논리 연산자 | &&, ||, ! |
할당 연산자 | +=, -=, *=, /=, %=, ... |
삼항 연산자 | ? |
비트 연산자 | &, |, ^, <<, >> |
연산자의 종류에는 위의 표와 같습니다.
저 명칭에 대해서는 암기하지 않아도 상관없습니다. 다만, 그 기능에 대해서는 숙지하고 계셔야지만, 프로그래밍을 할 때, 써먹을 수 있고, 남이 짠 코드를 이해할 수 있습니다.
대입연산자
'=' 이 대입 연산자는 말그대로 값을 대입한다는 뜻입니다.
int a = 30;
이처럼 a라는 변수에 30이라는 값을 대입한다는 뜻입니다.
여기서 중요한 것은 수학에서의 등호 '='와는 의미가 다르다는 것입니다.
즉, '=' 오른쪽에 있는 값을 왼쪽에 있는 변수로 대입한다는 뜻이 됩니다. 절대 같다는 뜻이 아니므로 명심해야 합니다.
저 부분을 "같다"라고 생각해서 발생하는 프로그래밍에서 휴먼에러가 생각보다 상당히 많습니다. 주의가 필요합니다.
산술연산자
산술적, 수학적 계산을 하는데 사용되는 연산자 입니다.
#include <stdio.h>
int main(void)
{
int a = 10;
int result;
result = a + 1; // a 더하기 1의 결과를 result에 대입
printf("%d + 1 = %d\n", a, result);
result = a - 1; // a 빼기 1의 결과를 result에 대입
printf("%d - 1 = %d\n", a, result);
result = a * 2; // a 곱하기 2의 결과를 result에 대입
printf("%d * 2 = %d\n", a, result);
result = a / 2; // a 나누기 2의 결과를 result에 대입
printf("%d / 2 = %d\n", a, result);
result = a % 3; // a를 3으로 나눈 후 나머지를 result에 대입
printf("%d %% 3 = %d\n", a, result);
return 0;
}
기본적인 연산 기호는 보시는 바와 같습니다.
이 중에서 '%'에 printf 부분에서 '%%' 처럼 2개가 들어있는 이유는 printf에서 %는 특수기호로 사용되기 때문에 %를 출력해주려면 2번 입력해주어야 합니다.
그 외 ++, --가 있습니다.
++ : 변수 값에다가 +1 하여 그 변수에다가 저장한다는 의미
-- : 변수 값에다가 -1 하여 그 변수에다가 저장한다는 의미
++, --의 위치는 변수의 앞이나 뒤에 붙일 수 있습니다.
앞에 붙인 것과 뒤에 붙인 것의 결과는 다릅니다.
뒤에 붙인다면, 그 라인의 코드가 다 수행되고 나서 결과가 반영됩니다.
앞에 붙이는 경우는 먼저 연산을 해서 변수값을 저장을 하고, 그 라인의 코드를 수행합니다.
다음 예제 코드를 보시면 확인이 됩니다.
#include <stdio.h>
int main(void)
{
int a = 10;
int result;
printf("a++의 값은 %d\n", a++);
// a는 10이고 printf 출력이 끝난 뒤에 더하기 1 된 결과로 저장됨
printf("a의 값은 %d\n", a);
// a++이 있는 printf 다음 a를 다시 출력해보면 값이 변한 게 확인됨
printf("a--의 값은 %d\n", a--);
// a는 11이고 printf 출력이 끝난 뒤에 빼기 1 된 결과로 저장됨
printf("a의 값은 %d\n", a);
// a--이 있는 printf 다음 a를 다시 출력해보면 값이 변한 게 확인됨
a = 10;
printf("++a의 값은 %d\n", ++a);
// a 값을 1증가를 먼저 해주고 printf가 수행됨.
printf("a의 값은 %d\n", a);
// ++a의 결과와 같음.
printf("--a의 값은 %d\n", --a);
// a 값을 1감소를 먼저 해주고 printf가 수행됨.
printf("a의 값은 %d\n", a);
// --a의 결과와 같음.
return 0;
}
관계연산자
관계연산자의 결과는 참(1), 거짓(0)으로 나옵니다.
연산자 | 의미 |
a < b | a는 b보다 작다. |
a > b | a는 b보다 크다. |
a <= b | a는 b보다 작거나 같다. |
a >= b | a는 b보다 크거나 같다. |
a == b | a와 b는 같다. |
a != b | a와 b는 다르다. |
수학적인 기호와 의미가 동일합니다.
여기서 ' 같다 ' 는 '='가 2번 들어간 '==' 이고, 다르다는 '!'와 '='를 합친 '!=' 입니다.
프로그래밍에서 '!' 의 의미는 NOT 의 의미 입니다. '아니다' 라는 뜻이죠.
그리고 그 결과는 참, 거짓으로 저장이 되게 됩니다.
논리연산자
연산자 | 의미 |
조건1 && 조건2 | 조건1과 조건2 모두가 참인 경우 참 하나라도 거짓이면 결과는 거짓 |
조건1 || 조건2 | 조건1과 조건2 둘 중 하나라도 참이면 참 모두 거짓이면 결과는 거짓 |
! 조건1 | 조건1의 결과를 반대로 뒤집는다. 조건1이 참이면 결과는 거짓으로 바꿈 조건1이 거짓이면 결과는 참으로 바꿈 |
논리연산자에서 조건은 관계 연산자로 된 식을 주로 반영해서 많이 사용합니다.
예를 들면
1 < x < 5
이 기호의 뜻은 "x는 1보다 크고, 5보다 작다" 입니다.
이를 C언어의 논리 연산자로 나타내면 다음과 같습니다.
( x > 1 ) && ( x < 5 )
x <= 5 or x > 10
이 기호의 뜻은 "x는 5이하 이거나 또는 x는 10보다 크다' 입니다.
이를 C언어 논리 연산자로 나타내면 다음과 같습니다.
( x <= 5 ) || ( x > 10 )
! 기호는 수학에서 특히 함수에서 여집합과 같다고 보시면 됩니다.
#include <stdio.h>
int main(void)
{
int a = 3;
printf("a == 3의 결과는 %d\n", a == 3);
printf("!(a == 3)의 결과는 %d\n", !(a == 3));
return 0;
}
할당, 삼항, 비트 연산자는 다음 포스트에서 이어가겠습니다.
'IT > C언어' 카테고리의 다른 글
[비와이][C언어] 연산자에 대해서 알아보자 - 2(할당, 삼항, 비트) (0) | 2021.06.27 |
---|---|
[비와이][C언어] 03 - 변수와 상수 (0) | 2021.06.24 |
[비와이][C언어] 02 - printf와 형식 지정자 (0) | 2021.06.22 |
01 - 데이터 자료형에 대해서 알아보자 ( 양수, 음수, 1의 보수 ) (0) | 2021.06.20 |
00 - Visual Studio Community 2019 설치, Hello World 출력 (0) | 2021.06.11 |
댓글