일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- 프로젝트
- 파이썬
- 표준 입출력
- 강의
- 안드로이드 앱 개발
- 추천
- 졸업 작품
- 졸업 작품 소재
- 원격 제어 프로그램
- 소스 코드
- 알고리즘
- 실습
- 언제나휴일
- 무료 동영상 강의
- 유튜브 동영상 강의
- 소켓 통신
- 표준 라이브러리 함수
- 산책하기 좋은 곳
- 동영상
- c#
- c언어
- 실습으로 다지는 c#
- 클래스 다이어그램
- Windows Forms
- 동영상 강의
- 캡슐화
- 네트워크 프로그래밍
- 언제나 휴일
- C++
- 충남 천안
- Today
- Total
프로그래밍 언어 및 기술 [언제나휴일]
대입 연산의 왼쪽(좌항)에 오는 표현을 l-value라고 불러요. 본문
안녕하세요. 언제나 휴일의 언휴예요.
대입 연산자와 l-value
복합 대입 연산자
1. 대입 연산자와 l-value
프로그래밍에서 변수에 원하는 값을 설정할 때 대입 연산자를 사용하죠.
당연히 대입 연산자 왼쪽(좌항)에는 상수 표현은 올 수 없어요.
정수형 변수 i가 있을 때 i+3=7; 표현은 문법적 오류가 발생해요.
i+3의 연산 결과는 상수이며 l-value로 사용할 수 없어요.
#include <stdio.h>
int main()
{
int i = 0;//초기화
i = 7;//변수 i에 7을 설정
i + 3 = 7;//i+3에 7을 설정. i+3의 연산 결과는 상수
return 0;
}
위 코드를 빌드하였을 때 나오는 결과를 보면 l-value로 사용할 수 없다는 오류가 발생하죠.
빌드 시작...
1>------ 빌드 시작: 프로젝트: lvalue, 구성: Debug Win32 ------
1>Program.c
1>D:\동영상 강의\언제나 C언어\대입 연산\lvalue\Program.c(6,14): error C2106: '=': 왼쪽 피연산자는 l-value이어야 합니다.
1>"lvalue.vcxproj" 프로젝트를 빌드했습니다. - 실패
이처럼 실제 개발에서 대입 연산의 왼쪽(좌항)에 l-value로 사용할 수 없는 표현을 쓰면 오류가 발생해서 개발자는 쉽게 문제를 해결할 수 있어요.
시험을 보는 곳에서는 이러한 부분이 어려울 수도 있겠지만 실제 개발에서는 개발 도구와 구글을 비롯한 여러 도움을 받을 수 있어서 해결하기 어려운 문제는 아니예요.
2. 복합 대입 연산자
코드를 작성하다 보면 다른 연산을 수행한 결과를 대입하는 일은 매우 흔한 일이죠.
복합 대입 연산자는 l-value 자신을 피 연산자로 사용할 때 간단하게 표현할 수 있는 연산자입니다.
변수 i에 i+3 연산 결과를 대입하는 표현은 i=i+3; 입니다.
이를 간단하게 i+=3;으로 표현할 수 있어요.
#include <stdio.h>
int main()
{
int i = 0;//초기화
i = i+3;//변수 i에 i+3 연산 결과를 설정
printf("i:%d\n", i);
i += 3;//변수 i에 자기 자신(i)에 3을 더한 값을 설정
printf("i:%d\n", i);
return 0;
}
실행하면 예상처럼 3과 6을 출력해요.
i:3
i:6
이 때 +=을 복합 대입 연산자라고 부릅니다. 주의할 점은 하나의 연산이라 += 사이에 공백이 올 수 없어요.
다음 코드는 의도적으로 += 연산 사이에 공백을 넣은 코드예요.
#include <stdio.h>
int main()
{
int i = 0;//초기화
i + = 3;//변수 i에 자기 자신(i)에 3을 더한 값을 설정
printf("i:%d\n", i);
return 0;
}
빌드하면 다음처럼 오류가 발생하죠.
다시 빌드 시작...
1>------ 모두 다시 빌드 시작: 프로젝트: 복합 대입 연산에서의 오류, 구성: Debug Win32 ------
1>Program.c
1>D:\동영상 강의\언제나 C언어\대입 연산\복합 대입 연산에서의 오류\Program.c(5,9): error C2059: 구문 오류: '='
1>"복합 대입 연산에서의 오류.vcxproj" 프로젝트를 빌드했습니다. - 실패
이러한 문제도 실제 개발에서는 아무런 이슈가 아니예요. 빌드 오류를 보고 쉽게 수정할 수 있거든요.
복합 대입 연산에는 += 외에도 산술 연산(-=, *=, /=, %=)과 비트 연산(<<=, >>=, &= ,|=, ^=) 등에서 가능합니다.
(<, <=, >, >=, &&, || 연산은 복합 대입 연산을 제공하지 않아요.)
#include <stdio.h>
int main()
{
int i = 3;//초기화
i += 3;//i:6
printf("%d\n", i);
i -= 1;//i:5
printf("%d\n", i);
i *= 2;//i:10
printf("%d\n", i);
i /= 2;//i:5
printf("%d\n", i);
i %= 3;//i:2
printf("%d\n", i);
i <<= 4;//i:32
printf("%d\n", i);
i >>= 4;//i:2
printf("%d\n", i);
i |= 5;//i:7
printf("%d\n", i);
i &= 5;//i:5
printf("%d\n", i);
i ^= 3;//i:6
printf("%d\n", i);
return 0;
}
실행 결과는 다음과 같아요.
6
5
10
5
2
32
2
7
5
6
여러분께서 미리 연산 결과를 쉽게 예측할 수 있는 표현이 아니라면 복합 대입 연산을 사용하지 마세요.
연산 결과를 쉽게 예측하기 어렵다는 것은 연산이 어렵거나 작성한 코드를 분석하기 어려운 것일 수 있겠죠.
실제 프로그램을 작성할 때 사칙 연산 정도에서 복합 대입 연산을 사용하는 개발자가 많은 것 같네요.
언제나휴일 추천 여행 및 산책
'C & C++ > 언제나 C언어' 카테고리의 다른 글
반복적인 작업은 while 혹은 for 문을 사용하세요. (0) | 2025.01.03 |
---|---|
값에 따라 수행할 구문을 선택하는 switch case 문 (0) | 2025.01.03 |
조건문 문제 솔루션 (0) | 2025.01.03 |
조건문에서 if는 참일 때 수행 하고 else는 거짓일 때 수행 (0) | 2025.01.03 |
비트 자리 이동 연산, 쉬프트 연산 (0) | 2025.01.03 |
xor mask를 이용한 암호화, and mask를 이용한 이진수 출력 (0) | 2025.01.03 |
비트 연산 & | ^ ~ (1) | 2025.01.03 |
비교 연산, 논리 연산의 도움을 받으세요. (1) | 2025.01.03 |