gyumin.log

대입 연산자

🌿 자라는 중

목차

a = a + 5 - 수학의 “같다”로 읽으면 말이 안 되는 식이다. =는 같다가 아니라 “넣는다”. 이렇게 읽는 순간 반복문까지 풀린다.

= 는 “같다”가 아니라 “넣는다”

int a = 10;
a = a + 5;    // a 상자: 10 → 15
대입은 계산 후 덮어쓰기 a = a + 5가 오른쪽 계산을 먼저 하고, 그 결과로 왼쪽 상자를 덮어써서 원래 값이 사라지는 두 단계 a = a + 5 상자 a - 지금 10 원래 값 ① 오른쪽을 먼저 계산 a + 5 → 10 + 5 = 15 ② 상자에 덮어쓰기 10 → 15 원래 값은 사라짐 수학의 "같다"가 아니라 순서 있는 두 동작 - 오른쪽을 계산해서, 왼쪽에 넣는다

오른쪽을 먼저 계산해서 왼쪽 상자에 덮어쓴다. 원래 값은 사라진다. while (i = i + 1) 같은 반복문이 돌아가는 이유가 이거다 - 매번 “지금 값을 꺼내 계산하고, 다시 넣는” 동작의 반복.

복합 대입 = 연산 + 대입 한 번에

연산자의미a = 10 일 때결과풀어 쓰면
+=더하고 대입a += 313a = a + 3
-=빼고 대입a -= 37a = a - 3
*=곱하고 대입a *= 220a = a * 2
/=나누고 대입a /= 33a = a / 3
%=나머지 대입a %= 31a = a % 3

a ?= b 는 전부 a = a ? b 로 풀어 쓸 수 있다. 헷갈리면 풀어서 계산하면 끝.

/=도 정수끼리면 정수 나눗셈 → 10 /= 3은 3.33이 아니라 3 (C 자료형의 버림 규칙 그대로).

파이썬은 /= 가 항상 실수

연산자C · JavaPython
/=정수면 정수 (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 += 1a++ 는 같다

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ⁿ, 결과는 항상 원래 타입으로.

연결되는 것들

  • 선언·초기화·대입·리셋 - 용어 구분은 변수 초기화
  • 정수 나눗셈이 왜 버림인지, int 상자의 크기 이야기 → C 자료형
  • 계산 결과를 찍을 때 서식과 타입 맞추기 → C 출력 함수