- 표현식의 값이 계산된 다음엔, 그 값을 변수에 저장해서 나중에 사용해야 함.
- C언어에서 단순할당을 해주는 = 연산자가 여기 사용됨.
- 이미 변수에 저장된 값을 바꾸는 데에는 복합할당연산자를 사용하면 됨.
📌 단순할당
- v = e는 표현식 e를 처리하고, 그 값을 복사해 v에 저장한다는 의미.
*e는 상수, 변수, 혹은 복잡한 표현식이 될 수 있음.
i = 5; /* i의 값은 5이다 */
j = i; /* j의 값은 5이다 */
k = 10 * i + j; /* k의 값은 55이다 */
- 만약 v와 e가 같은 형이 아니라면, 할당되는 순간 e의 값은 v의 형에 맞게 변환됨.
int i;
float f;
i = 72.99f; /* i의 값은 72이다 */
f = 136; /* f의 값은 136.0이다 */
📌 왼쪽값
- 할당 연산자는 왼쪽 값이라는 것이 좌측 피연산자로서 반드시 존재해야 함.
- 당장 우리가 아는 선에서는 '변수'만이 왼쪽값에 해당. (변수 이외의 왼쪽값은 추후 단원에서 다룸)
12 = i; /*** 틀림 ***/
i + j = 0; /*** 틀림 ***/
-i = j; /*** 틀림 ***/
📌 복합할당
- 코드1을 코드2로 줄여줌.
// 코드1
i = i + 2;
// 코드2
i += 2; /* i = i + 2 와 같다 */
- 복합할당연산자는 = 연산자와 같은 순서를 가지고, 우향결합적임.
- 복합할당연산자는 총 9개이며, 이와 같은 연산자들이 존재함. ( -=, *=, /=, %=)
- v += e e에 v를 더하고 그 값을 v에 저장한다.
- v -= e v에서 e를 빼고 그 값을 v에 저장한다.
- v *= e v를 e만큼 곱하고 그 값을 v에 저장한다.
- v /= e v를 e로 나누고 그 값을 v에 저장한다.
- v %= e v를 e로 나누었을 때의 나머지를 v에 저장한다.
v += e와 v = v + e는 엄연히 다른 구문이다. 두 구문이 같지 않은 이유는 우선 연산순서 문제가 있다. i *= j + k는 i = i * j + k가 아니다. 이 뿐만 아니라 v 자체에 부작용이 있어 v += e와 v = v + e가 서로 다른 경우가 있다. 이는 다른 복합할당연산자에도 해당하는 주의점이다.
[!!!] 복합할당연산자를 사용할 때 연산자를 구성하는 두 연산자를 서로 혼동하지 않도록 하자. 두 문자를 바꾸면 컴파일러한테는 상관 없지만 의도한 의미를 잃게 된다. 예를 들어 i += j라고 적어야하는데 i =+ j라고 적었다고 가정해보자. 프로그램은 정상적으로 컴파일은 될 것이지만 후자 표현식은 i = (+j)와 같은 의미이므로 사실상 i에 j의 값을 할당하는 것이다.
💡 본 내용은 K.N.King의 C Programming: A Modern Approach 책을 참고하였습니다.
'📚 STUDY > 🔥 C' 카테고리의 다른 글
[4-4] 표현식 평가 (0) | 2024.09.03 |
---|---|
[4-3] 증감연산자 (0) | 2024.09.03 |
[4-1] 산술연산자 (1) | 2024.09.03 |
Q&A (3) | 2024.09.02 |
[3-2] scanf 함수 (0) | 2024.09.02 |