-목차-
1. C 언어의 여러 가지 연산자
2. 연산자 우선 순위와 결합 순서
1. C 언어의 여러 가지 연산자
● 대입 연산자
※ 대입 연산자도 수식이다.
- 대입 연산자인 = 도 엄연히 연산자이므로 값을 반환한다.
- 대입 연산자의 결과 값은 해당 변수에 저장된 값이다.
- 대입 연산 결과를 이용해 연속 대입을 수행할 수 있다.
ex)
#include <stdio.h>
int main(void)
{
int a;
double b;
float c;
printf("%d\n",a = 3);
printf("%f\n",b = 3.3);
printf("%f\n",c = b = 5.5);
return 0;
}
- 연속 대입은 오른쪽부터 수행한다. 즉, b = 5.5 가 수행된 후 c = b 가 수행된다.
+) 대입 연산 유의 사항
- 조건 수식에서 '=='을 사용해야할 부분에 '='을 사용하는 잘못을 저지르기 쉽다.
#include <stdio.h>
int main(void)
{
int a;
scanf("%d",&a);
if (a = 1){
printf("a == one\n");
} else {
printf("a == other\n");
}
return 0;
}
- a = 1 이라는 수식은 변수 a에 1이라는 값을 반환하기에 if 문의 조건 내에서 무조건 True가 된다. (왜냐하면 0이 아니면 무조건 True이기때문이다.)
+) 복합 대입 연산자
대입 연산자 | 사용 예시 | 의미 |
+= | X += 3; | X = X + 3; |
-= | X -= 3; | X = X - 3; |
*= | X *= 3; | X = X * 3; |
/= | X /= 3; | X = X / 3; |
%= | X %= 3; | X = X % 3; |
- 물론 복합연산자가 꼭 필요하지는 않지만 변수의 이름이 길 때 유리하다.
● 증감 연산자
- 증감 연산자는 단항 연산자이고, 피연산자가 반드시 변수여야한다.
- 장점으로는 코드가 간결해진다는 것이다.
- 단점으로는 연산자의 위치에 따른 효과가 달라질 수 있어 혼동하기 쉽다. 코드의 오류 가능성이 높아지고 이해가 어렵다. 게다가 한 변수에 대해 2번 사용하면 안된다. (왜냐하면 ++a*a++과 같은 수식의 결과는 컴파일러의 종류에 따라 결과값이 다르게 나타나기때문이다.)
#include <stdio.h>
int main(void)
{
int a = 3 , b = 3 , c = 3, d = 3;
printf("%d\n",++a);
printf("%d\n",b++);
printf("%d\n",--c);
printf("%d\n",d--);
printf("%d,%d,%d,%d\n",
a,b,c,d);
return 0;
}
● 비트 연산자 (이거 어렵..)
- 하드웨어를 다루는데 주로 필요하다
2. 연산자 우선 순위와 결합 순서
● 우우선 결합
- 단항 연산자, 조건 연산자, 대입 연산자만 우우선 결합이다.
● 우선순위와 결합순서 기억 요령
※ 일반 법칙
- 곱은 합보다 우선하다.
- 단항, 대입, 조건 연산자는 우우선 결합이다.
※ 최고 우선순위와 최저 우선순위 기억하기
- 최고 우선순위 : () [] -> .
- 최저 우선순위 : ,
※ 나머지는 "계산하여 비교한 뒤, 판단하여 저장한다" 로 외우자.
+) 여러 의미로 사용되는 연산 기호
+) 쉼표 연산자
expr_1, expr_2;
- 수식 expr_1과 expr_2의 계산 작업은 모두 수행된다.
- 우선 순위가 가장 낮다.
#include <stdio.h>
int main(void)
{
int a = 1 , b = 2 ;
int c ;
c = a,b ;
printf("%d\n",c) ;
c = (a,b);
printf("%d\n",c);
return 0;
}
- 일반적인 활용은 다음과 같이 두 개 이상의 수식을 한 문장에 사용할 때 쓴다.
#include <stdio.h>
int main(void)
{
int a , b ;
for (a=0, b=4; a < 5; ++a, --b){
printf("%d %d\n",a,b);
}
return 0;
}
+) 연산 순서 예제
# include <stdio.h>
int main(void)
{
int a;
printf("%d\n",a=3);
printf("%d\n",a+=1);
printf("%d\n",a+=(a=2*a+4)+5);
return 0;
}
① 3
② 4
③ a += (a=12) + 5 -> a = 12 + 12 + 5 = 29
'CS > C, C++' 카테고리의 다른 글
[C/C++] 01-2 C 언어 소개와 컴파일의 이해 (0) | 2021.10.17 |
---|---|
[C/C++] 01-1 컴퓨터 시스템과 프로그램의 이해 (0) | 2021.10.17 |
[C/C++] 05-3 다양한 자료형과 자료 표현 - 문자열 (0) | 2021.10.02 |
[C/C++] 05-2 다양한 자료형과 자료 표현 - 실수형 및 문자 (0) | 2021.09.30 |
[C/C++] 05-1 다양한 자료형과 자료 표현 - 정수형 (0) | 2021.09.29 |