본문 바로가기
~ 2024.03/C 언어

[C 언어 기초] 표현식

by Monett 2023. 12. 13.
반응형

K.N.King 의 C Programming - A Modern Approach 를 공부하며 내용을 정리한 글 입니다.
현재 블럭의 내용은 작성자의 의견 혹은 생각이며, 틀린 내용이 있을 수 있습니다. 지적 감사드립니다. 

C언어의 표현식 종류

산술 연산자

단항 이항
덧셈류 곱셈류
+ (단항 덧셈) + (덧셈) * (곱셈)
- (단항 뺄셈) - (뺄셈) / (나눗셈)
  % (나머지)

 

※ [구현정의행동]

/이나 % 연산자를 음수 피연산자와 함께 사용하게 되면 결과를 표현해주기 매우 힘들다.

C89 표준에 의하면 두 개의 피연산자 중 하나라도 음수면 나눗셈의 결과값은 반올림 되거나 반내림 될 수 있다고 되어있다. 예를 들면 -9 / 7의 값이 -1이거나 -2가 될 수 있다. 만약 i j가 음수라면 C89에서 i % j는 사용하는 방법에 따라 다르다. 예를 들어 -9 % 7 -2거나 5가 될 수 있다. [C99] C99에선 나눗셈의 결과가 언제나 0과 가장 가까운 값을 갖는다. 즉 -9 / 7의 값은 -1이고, i % j의 경우 결과값의 부호는 i를 따라간다. 즉 -9 % 7 -2이다.

 

할당 연산자

i = 5;

 

대부분의 프로그래밍 언어에서 할당은 구문이지만, C언어에서는 연산으로 취급된다.

즉, 할당도 결과를 만들어낸다. i = 5; 구문의 결과는 5이다.

(이는 피연산자의 값을 변화시키기에 부작용(side effect)이 있다고 말 할 수 있다.)

 

복합 할당

한 변수에 그 변수를 이용하여 새로운 값을 할당하기 위해 사용되는 할당은 C에서 자주 사용된다.

i = i + 2;

위 코드를 줄이기 위해 사용하는 것이 복합할당이다. 

i += 2;

 

복합 할당 연산자의 종류는 아래와 같다.

  • +=
  • -=
  • *=
  • /=
  • %=
  • 비트연산
    • &=
    • |=
    • ^=
    • <<=
    • >>=

증감 연산자

변수에 가해지는 가장 흔한 두 가지 연산은 1을 더하는 "증가"와 반대로 1을 빼는 "감소" 연산이다.

i = i + 1;
j = j - 1;

또는

i += 1;
j -= 1;

위 코드와 같이 사용할 수도 있지만, 더 간단하게 표현할 수 있다.

바로 증가 연산자 ++ 감소 연산자 --를 통해서이다. 

 

복잡함이 발생하는 이유는, ++i 처럼 전위(prefix) 연산자로 쓰이거나 i++ 처럼 후위(postfix) 연산자로 사용될 수 있기 때문이다. 전위 연산자는 "당장 증가해"라는 뜻이고, 후위 연산자는 "지금은 원래 값 쓰고 나중에 증가해"라는 뜻이다.

후위 연산자의 시점에 대해 C 표준은 정확히 명시하고 있지 않으며, 다음 구문이 실행되기 이전에 연산된다고 생각하는 것이 안전하다.


표현식 우선순위

순서 이름 기호 결합방향
1 증감(후위) ++, -- 좌향
2 증감(전위), 단향 음양 ++, --, +, - 우향
3 곱셈 *, /, % 좌향
4 덧셈 +, - 좌향
5 할당 =, *=, /=, %=, +=, -= 우향

[GPT] C 언어의 모든 연산자 우선순위

C 언어의 연산자들은 우선순위에 따라 다르게 처리됩니다. 아래는 C 언어에서 사용되는 주요 연산자들을 우선순위에 따라 나열한 목록입니다. 높은 숫자일수록 높은 우선순위를 나타냅니다.

  1. () (괄호, 함수 호출)
  2. [] (배열 인덱싱)
  3. -> (구조체 포인터 멤버 접근)
  4. . (구조체 멤버 접근)
  5. ++, -- (전위 증가/감소)
  6. +, - (양수/음수 부호, 이항 덧셈/뺄셈)
  7. !, ~ (논리 NOT, 비트 NOT)
  8. *, /, % (곱셈, 나눗셈, 나머지)
  9. +, - (이항 덧셈/뺄셈)
  10. <<, >> (비트 좌/우 시프트)
  11. <, <=, >, >= (비교 연산자)
  12. ==, != (등호, 부등호 비교)
  13. & (비트 AND)
  14. ^ (비트 XOR)
  15. | (비트 OR)
  16. && (논리 AND)
  17. || (논리 OR)
  18. ? : (조건 연산자)
  19. =, +=, -=, *=, /=, %=, &=, |=, ^=, <<=, >>= (대입 및 복합할당 연산자)
  20. **, ** (쉼표 연산자)

이 우선순위 목록은 일반적인 경우를 다루고 있습니다. 괄호를 사용하여 특정 연산을 강조하거나 우선순위를 조절할 수 있습니다. 개발자가 코드를 작성할 때 괄호를 적절히 사용하여 의도한 연산 순서를 명확히 하는 것이 좋습니다.

반응형

'~ 2024.03 > C 언어' 카테고리의 다른 글

[C 언어 기초] 포인터  (0) 2023.12.13
[C 언어 기초] 선택문  (0) 2023.12.13
[C 언어 기초] 서식 입출력  (0) 2023.12.12
[C 언어 기초] C 프로그램의 구조  (0) 2023.12.12
[C 언어 기초] C 언어 개요  (1) 2023.12.12