대입 연산자
🌿 자라는 중
목차
a = a + 5 - 수학의 “같다”로 읽으면 말이 안 되는 식이다. =는 같다가 아니라 “넣는다”. 이렇게 읽는 순간 반복문까지 풀린다.
= 는 “같다”가 아니라 “넣는다”
int a = 10;
a = a + 5; // a 상자: 10 → 15
오른쪽을 먼저 계산해서 왼쪽 상자에 덮어쓴다. 원래 값은 사라진다. while (i = i + 1) 같은 반복문이 돌아가는 이유가 이거다 - 매번 “지금 값을 꺼내 계산하고, 다시 넣는” 동작의 반복.
복합 대입 = 연산 + 대입 한 번에
| 연산자 | 의미 | a = 10 일 때 | 결과 | 풀어 쓰면 |
|---|---|---|---|---|
+= | 더하고 대입 | a += 3 | 13 | a = a + 3 |
-= | 빼고 대입 | a -= 3 | 7 | a = a - 3 |
*= | 곱하고 대입 | a *= 2 | 20 | a = a * 2 |
/= | 나누고 대입 | a /= 3 | 3 | a = a / 3 |
%= | 나머지 대입 | a %= 3 | 1 | a = a % 3 |
a ?= b 는 전부 a = a ? b 로 풀어 쓸 수 있다. 헷갈리면 풀어서 계산하면 끝.
/=도 정수끼리면 정수 나눗셈 → 10 /= 3은 3.33이 아니라 3 (C 자료형의 버림 규칙 그대로).
파이썬은 /= 가 항상 실수
| 연산자 | C · Java | Python |
|---|---|---|
/= | 정수면 정수 (10/=3 → 3) | 항상 실수 (10/=3 → 3.333…) |
//= | 없음 | 정수 나눗셈 (10//=3 → 3) |
a = 10; a /= 2; print(a) # 5.0 ← 실수!
a = 10; a //= 3; print(a) # 3
/가 항상 float인 파이썬 규칙이 복합 대입에도 그대로 적용된다 → 파이썬 / 는 항상 실수.
비트 시프트 복합 대입
| 연산자 | 효과 |
|---|---|
>>= n | ÷ 2ⁿ |
<<= n | × 2ⁿ |
int a = 100;
a >>= 1; // 50 (오른쪽 1칸 = ÷2)
a >>= 1; // 25
int b = 5;
b <<= 2; // 20 (왼쪽 2칸 = ×4)
비트가 오른쪽으로 밀리면 수가 작아지고(÷), 왼쪽으로 밀리면 커진다(×). 비트 연산자(& | ^ ~ << >>) 전체는 별도 노트로 정리 예정.
a += 1 과 a++ 는 같다
int b = 10; b += 1; // 11
int c = 10; c++; // 11
단독으로 쓰면 완전히 동일. Python에는 ++가 없어서 a += 1만 쓴다.
숨은 형변환 함정
int a = 10;
a /= 3.0; // 계산은 3.333... 인데
printf("%d", a); // 3 ← int 상자에 넣느라 잘림
복합 대입은 결과를 원래 타입으로 되돌린다. 계산 중간에 실수(3.333…)가 나와도, int 상자에 넣는 순간 소수점이 다시 버려진다.
정처기 포인트
- 함정 1:
a %= 3같은 복합 대입 → 무조건a = a % 3으로 풀어서 계산. - 함정 2:
10 /= 3- C·Java는 3, 파이썬은 3.333…. 언어부터 확인. - 함정 3:
>>=는 나누기,<<=는 곱하기 - 방향을 바꿔치기해서 낸다.a >>= 2는 ÷4. - 함정 4:
int a = 10; a /= 3.0;→ 3.333이 아니라 3. 복합 대입은 결과를 원래 타입으로 되돌린다. - 함정 5: 파이썬 코드에
a++가 보이면 그 자체가 함정 - 파이썬엔++가 없다.
한 줄: =는 계산 후 덮어쓰기, ?=는 a = a ? b로 풀기, >>=는 ÷2ⁿ·<<=는 ×2ⁿ, 결과는 항상 원래 타입으로.