사칙연산
여기서는 사칙연산, 즉 덧셈 뺄셈 곱셈 나눗셈을 하는 데 필요한 연산자를 알아봅니다.
단항 연산자
정의
단항 연산자란 연산 대상(Operand, 피연산자)이 하나만 필요한 연산자를 뜻합니다.
종류
- 연산자: 부호 바꾸기
//- 연산자: 부호를 바꿉니다. unsigned 변수에는 사용할 수 없습니다. int a=2; printf("%d\n",a); //2가 출력됩니다. printf("%d\n",-a); //-2가 출력됩니다. a의 값은 바뀌지 않습니다. a=-a; //-a를 a에 대입합니다. printf("%d\n",a); //-2가 출력됩니다. a=-a; //-a를 a에 대입합니다. printf("%d\n",a); //2가 출력됩니다.
++, -- 연산자: 변수 값 1 증가/감소
//++연산자, -- 연산자: 해당 변수의 값을 1 증가시키거나 감소시킵니다. // 해당 변수의 앞에 오느냐, 뒤에 오느냐에 따라 연산 순서가 다릅니다. int a=5; a--; //a의 값을 1 감소시킵니다. printf("%d\n",a); //4를 출력합니다. =-a; //a의 값을 1 감소시킵니다. printf("%d\n",a); //3을 출력합니다. a++; //a의 값을 1 증가시킵니다. printf("%d\n",a); //4를 출력합니다. ++a; //a의 값을 1 증가시킵니다. printf("%d\n",a); //5를 출력하빈다. //여기서부터 이해하기 좀 어려울 수 있습니다. a=10; //a를 10으로 초기화합니다. printf("%d\n",a++); //10이 출력됩니다. printf("%d\n",a); //11이 출력됩니다. printf("%d\n",++a); //12가 출력됩니다. printf("%d\n",a); //12가 출력됩니다. printf("%d\n",a--); //12가 출력됩니다. printf("%d\n",a); //11이 출력됩니다. printf("%d\n",--a); //10이 출력됩니다. printf("%d\n",a); //10이 출력됩니다.
++와 --와 같은 연산자가 변수의 '앞'에 올 경우, 변수의 값에 1이 더해지고 난 뒤에 그 변수가 사용됩니다. 가령 다음과 같은 코드에서는,
int a=1; printf("%d\n",a++); printf("%d\n",a);
이런 일이 벌어집니다.
- int형 변수 a에 1을 할당.
- a 출력.
- a의 값을 1 증가시킴.
- a 출력.
반면 다음과 같은 코드에서는,
int a=1; printf("%d\n",++a); printf("%d\n",a);
이런 일이 벌어집니다.
- int형 변수 a에 1을 할당.
- a의 값을 1 증가시킴.
- a 출력.
- a 출력.
--연산자도 마찬가지입니다.
이항 연산자
정의
연산 대상이 2개 필요한 연산자를 말합니다. 그런데 정식 명칭이 이항 연산자가 맞는지 잘 모르겠습니다. 뭐, 별로 중요하지 않습니다.
종류
+ : 덧셈
printf("%d\n",3+2); int a=3, b=-9; printf("%d\n",a+b); char A='A'; int c=10; printf("%c\n", A+c);
- : 뺄셈
printf("%d\n",21-5); int a=8; int b=9-a; printf("%d\n",a-b); char A='C'; int c=2; printf("%c\n",A-c);
* : 곱셈
printf("%d\n", 2*2*2*2*2*2*2*2*2*2); int a=2; int b=a*a; printf("%d\n",a*b); char a='%'; printf("%d\n",a*2);
/ : 나눗셈
printf("%d\n",6/3); printf("%d\n",5/3); //버림 int a=43, b=95; printf("%d\n",a/b); //버림 double a=43.0, b=95.0; printf("%f\n",a/b);
C는 정수 나눗셈을 할 때 나오는 소수부는 무조건 버림을 원칙으로 합니다. 소수부를 표시하려면 double 또는 float형을 써야 합니다.
% : 나머지
printf("%d\n",5%3); printf("%d\n",6%3); int a=10000, b=345; printf("%d\n",a%b); printf("%d\n",5);
= : 대입
int a=5; a=a+1; //a에 1을 더한 값을 다시 a에 대입합니다. 즉, a 변수의 값이 1 증가됩니다. char b='A';
오른쪽에 있는 값을 왼쪽(lvalue)에 대입한다는 개념을 이해하는 것이 중요합니다.
+= -= /= *= %= : 연산과 대입 같이 하기
int a=5; int b=3; // 같은 효과를 내는 줄끼리 묶었습니다. 변수 값이 바뀌는 것은 무시하도록 합시다. a+=b; // a의 값을 b만큼 증가시킵니다. a=a+b; // a에 b를 더한 값을 a에 대입합니다. a-=b; // a의 값을 b만큼 감소시킵니다.. a=a-b; // a에서 b를 뺀 값을 a에 대입합니다. a*=b; // a의 값을 b배로 만듭니다. a=a*b; // a에 b를 곱한 값을 a에 대입합니다. a/=b; // a를 b로 나눕니다. a=a/b; // a를 b로 나눈 값을 a에 대입합니다. a%=b; // a를 b로 나눈 나머지로 만듭니다. a=a%b; //a를 b로 나눈 나머지를 a에 대입합니다.
연산과 대입을 같이 하는 연산자에 익숙해집시다.