c 연산자 우선순위

떵떵·2022년 6월 9일
0

연산자의 우선순위를 알고있으면 좋지만 다 외우기엔 쉽지 않다.

*, /, %가 +, -보다는 높다는 것만 알아도 대충 쓸 수 있을 것이다.

또한, 수학 식에서 원하는 계산을 위해 우선순위 높은것보다 먼저 계산하기 위해 괄호(())를 쓰는 것처럼 c언어에서도 사용할 수 있다.

int main()
{
	int num1, num2;
    num1 = 35 + 1 * 2;
    num2 = (35 + 1) * 2;
    
    printf("%d\n", num1);
    printf("%d\n", num2);
}
>>> 37
>>> 72

이처럼 괄호의 사용으로 결과값이 많이 바뀔 수 있기 떄문에 원하는 값을 도출하기 위해 적절히 사용해 주어야 한다.

괄호를 사용한 계산식

괄호를 사용한 계산식의 순서는 다음과 같다
1) 괄호를 사용한 연산자
2) 우선순위가 높은 연산자
3) 결합방향에 따라 순서대로 계산

또한, 괄호는 여러 번 겹처서 사용도 가능하기 때문에 복잡한 식이 있으면 괄호를 적절히 사용하여 가독성을 높일 수 있다.

연산자의 결합 방향

--, ++, =, +, -, !, ~, 등등 변수 앞에 바로 붙는 연산자들은 <- 방향으로 연산이 된다.
!! 변수 뒤에 붙는 --, ++는 ->방향 이다.

여러가지 결합 방향 연산자 사용

int main()
{
	int num1, num2 =3;
    
    num1 = 10 + 2 / (5 - 3) * ++num2;
    
    printf("%d\n", num1);
}
>>> 14

위의 연산식을 보면 복잡해 보이지만 한 번 진행을 봐보면 이해가 된다.

  1. (5 - 3) = 2
  2. ++num2 = ++3 = 4
  3. 2 / (5 - 3) = 1
  4. {2 / (5 - 3)} * ++num2 = 4
  5. 10 + 4 = 14
    = 14

논리, 비교, 시프트 연산자

논리

! <- && <- || 순

(false || false) && !false || false 가 조건식에 있으면 다음과 같음

1) (false||false) = false
2) !false = true
3) false && true = false
4) false || false = false
= false(0)

비교

<, >,<=, >=는 서로 같고 =, ==보다 우선순위가 빠름

num1 = 5 == 5 < 10;
= 0

5 == 5 < 10 의 계산순서는 다음과 같다

1) 5 < 10 = false(0)
2) 5 == false(0) = false(0)
= 0

시프트

int num1 = 1, num2 = 2;
num3 = num1 << 2 + num2 << 1
= 32

주의, 시프트 연산자보다 산술 연산자의 우선순위가 더 높기 때문에 + 먼저 함
1) 2 + num 2 = 4
2) num1 << 5 = 32
= 32

대학 시험에 자주 나옴, 시프트 연산 쓸 때는 괄호 잘 쓰기

0개의 댓글