newclass
2025. 3. 27. 23:04
2.2 연산자
2.2.1 산술 연산자
기본적인 수학 연산을 수행하는 연산자입니다:
int a = 10, b = 3;
int sum = a + b; // 덧셈: 13
int difference = a - b; // 뺄셈: 7
int product = a * b; // 곱셈: 30
int quotient = a / b; // 정수 나눗셈: 3 (소수점 이하 버림)
int remainder = a % b; // 나머지: 1
// 실수 나눗셈 (소수점 결과를 얻기 위함)
double result = static_cast<double>(a) / b; // 3.33333
2.2.2 증감 연산자
변수의 값을 1씩 증가시키거나 감소시킵니다:
int x = 5;
x++; // 후위 증가: x는 이제 6
++x; // 전위 증가: x는 이제 7
x--; // 후위 감소: x는 이제 6
--x; // 전위 감소: x는 이제 5
전위 vs 후위 증감:
- 전위(++x): 증가 후 값 사용
- 후위(x++): 값 사용 후 증가
int a = 5, b = 5;
int resultA = ++a; // a를 6으로 증가시킨 후, resultA에 6 할당
int resultB = b++; // resultB에 5 할당 후, b를 6으로 증가
2.2.3 비교 연산자
두 값을 비교하여 참(true) 또는 거짓(false)을 반환합니다:
int x = 10, y = 20;
bool isEqual = (x == y); // 같음: false
bool isNotEqual = (x != y); // 같지 않음: true
bool isGreater = (x > y); // 큼: false
bool isLess = (x < y); // 작음: true
bool isGreaterOrEqual = (x >= y); // 크거나 같음: false
bool isLessOrEqual = (x <= y); // 작거나 같음: true
// 결과 확인
std::cout << std::boolalpha; // true/false로 출력
std::cout << "x == y: " << isEqual << std::endl; // false
주의: C++에서 비교 연산자는 두 피연산자가 같은 타입이거나 암시적으로 변환 가능해야 합니다.
2.2.4 논리 연산자
불리언 값(true/false)을 결합하거나 반전시킵니다:
bool condition1 = true, condition2 = false;
bool andResult = condition1 && condition2; // 논리 AND: false
bool orResult = condition1 || condition2; // 논리 OR: true
bool notResult = !condition1; // 논리 NOT: false
// 복합 논리식
bool complexLogic = (x > 5 && y < 30) || !(x == y); // true
단락 평가(Short-circuit evaluation):
- AND(&&): 첫 번째 조건이 거짓이면 두 번째 조건은 평가하지 않음
- OR(||): 첫 번째 조건이 참이면 두 번째 조건은 평가하지 않음
// x가 0이면 두 번째 조건은 평가되지 않음 (0으로 나누기 오류 방지)
if (x != 0 && 100 / x > 10) {
// 안전한 코드
}
2.2.5 비트 연산자
개별 비트 수준에서 연산을 수행합니다:
int a = 5; // 이진수: 0000 0101
int b = 3; // 이진수: 0000 0011
int bitwiseAND = a & b; // 비트 AND: 0000 0001 (1)
int bitwiseOR = a | b; // 비트 OR: 0000 0111 (7)
int bitwiseXOR = a ^ b; // 비트 XOR: 0000 0110 (6)
int bitwiseNOT = ~a; // 비트 NOT: 1111 1010 (-6, 2의 보수)
int leftShift = a << 1; // 왼쪽 시프트: 0000 1010 (10)
int rightShift = a >> 1; // 오른쪽 시프트: 0000 0010 (2)
비트 연산자의 일반적인 용도:
- 플래그와 상태 정보 저장
- 권한 및 옵션 설정
- 저수준 최적화
- 암호화 알고리즘
// 비트 플래그 사용 예시
const int READ = 0x1; // 0001
const int WRITE = 0x2; // 0010
const int EXECUTE = 0x4; // 0100
int permissions = 0;
permissions |= READ; // 읽기 권한 추가
permissions |= WRITE; // 쓰기 권한 추가
bool canRead = (permissions & READ) != 0; // true
bool canExecute = (permissions & EXECUTE) != 0; // false
permissions &= ~WRITE; // 쓰기 권한 제거
2.2.6 대입 연산자
변수에 값을 할당하는 연산자입니다:
int x = 10; // 기본 할당
x += 5; // x = x + 5와 같음: x는 이제 15
x -= 3; // x = x - 3와 같음: x는 이제 12
x *= 2; // x = x * 2와 같음: x는 이제 24
x /= 4; // x = x / 4와 같음: x는 이제 6
x %= 4; // x = x % 4와 같음: x는 이제 2
// 비트 연산자와 함께 사용
x &= 3; // x = x & 3: x는 이제 2
x |= 8; // x = x | 8: x는 이제 10
x ^= 6; // x = x ^ 6: x는 이제 12
x <<= 1; // x = x << 1: x는 이제 24
x >>= 2; // x = x >> 2: x는 이제 6
2.2.7 조건(삼항) 연산자
조건 ? 참일_때_값 : 거짓일_때_값 형식의 간단한 조건문:
int a = 10, b = 20;
int max = (a > b) ? a : b; // b가 더 크므로 max = 20
// if-else 대신 사용 가능
std::string status = (score >= 60) ? "합격" : "불합격";
// 중첩 사용도 가능 (하지만 가독성 주의)
int value = (a > b) ? (a > c ? a : c) : (b > c ? b : c); // 최댓값
2.2.8 연산자 우선순위
C++에서 연산자는 우선순위에 따라 평가됩니다. 기본적인 우선순위:
- 스코프 해결 연산자 (::), 멤버 접근 (., ->)
- 증감 연산자 (++, --), 논리 NOT (!), 비트 NOT (~)
- 곱셈, 나눗셈, 나머지 (*, /, %)
- 덧셈, 뺄셈 (+, -)
- 시프트 연산자 (<<, >>)
- 비교 연산자 (<, <=, >, >=)
- 동등 연산자 (==, !=)
- 비트 AND (&)
- 비트 XOR (^)
- 비트 OR (|)
- 논리 AND (&&)
- 논리 OR (||)
- 조건(삼항) 연산자 (?:)
- 할당 연산자 (=, +=, -= 등)
// 연산자 우선순위 예시
int result = 5 + 3 * 2; // 곱셈이 먼저: 5 + 6 = 11
// 괄호로 우선순위 변경
int result2 = (5 + 3) * 2; // 덧셈이 먼저: 8 * 2 = 16
// 복잡한 표현식
bool check = x + 5 > y * 2 && !flag;
// 1. x + 5, y * 2 계산
// 2. (x + 5) > (y * 2) 비교
// 3. !flag 계산
// 4. 논리 AND 연산
우선순위보다 괄호를 사용하는 것이 가독성에 좋습니다!