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 언어에서 사용되는 주요 연산자들을 우선순위에 따라 나열한 목록입니다. 높은 숫자일수록 높은 우선순위를 나타냅니다.
- () (괄호, 함수 호출)
- [] (배열 인덱싱)
- -> (구조체 포인터 멤버 접근)
- . (구조체 멤버 접근)
- ++, -- (전위 증가/감소)
- +, - (양수/음수 부호, 이항 덧셈/뺄셈)
- !, ~ (논리 NOT, 비트 NOT)
- *, /, % (곱셈, 나눗셈, 나머지)
- +, - (이항 덧셈/뺄셈)
- <<, >> (비트 좌/우 시프트)
- <, <=, >, >= (비교 연산자)
- ==, != (등호, 부등호 비교)
- & (비트 AND)
- ^ (비트 XOR)
- | (비트 OR)
- && (논리 AND)
- || (논리 OR)
- ? : (조건 연산자)
- =, +=, -=, *=, /=, %=, &=, |=, ^=, <<=, >>= (대입 및 복합할당 연산자)
- **, ** (쉼표 연산자)
이 우선순위 목록은 일반적인 경우를 다루고 있습니다. 괄호를 사용하여 특정 연산을 강조하거나 우선순위를 조절할 수 있습니다. 개발자가 코드를 작성할 때 괄호를 적절히 사용하여 의도한 연산 순서를 명확히 하는 것이 좋습니다.
'~ 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 |