/는 (정수끼리면) 소수점이 버려진다hp++와 ++hp는 “값을 사용하는 타이밍”이 다르다()로 의도를 고정한다| 연산자 | 기능 |
|---|---|
| + | 덧셈 |
| - | 뺄셈 |
| * | 곱셈 |
| / | 나눗셈 (정수끼리면 몫만) |
| % | 나머지 (정수만) |
정수 나눗셈에서 가장 많이 실수합니다.
int a = 7 / 2; // 3 (소수점 버림)
double b = 7 / 2; // 3 (이미 정수 나눗셈이 끝난 뒤 double로 변환)
double c = 7.0 / 2; // 3.5
hp += 5; // hp = hp + 5;
hp -= 5; // hp = hp - 5;
hp *= 2; // hp = hp * 2;
hp /= 2; // hp = hp / 2;
hp++; // 후위: 사용 후 증가
++hp; // 전위: 증가 후 사용
hp++; 과 ++hp; 동일a = hp++; → a에는 증가 전 값, hp는 이후 증가a = ++hp; → a에는 증가 후 값실전 팁: 복잡한 식 안에서
++/--를 섞으면 읽기 어려워집니다.
초반엔 “한 줄에 한 가지 일”로 분리하는 습관이 안전합니다.
x << k : 비트를 왼쪽으로 k칸 이동 x >> k : 비트를 오른쪽으로 k칸 이동 signed에서 >>는 구현에 따라 부호 비트를 유지(산술 시프트)하는 경우가 많음 → 비트 연산 목적이면 unsigned가 안전한 편int x = 5; // 0b0101
int y = x << 1; // 10 (0b1010)
int z = y >> 1; // 5
()로 직접 지정cout << (100 * (2 + 5) / 2); // 350
hp += 5 : 힐hp -= damage : 데미지hp *= 2 : 2배 버프실전에서는 “범위 제한”을 자주 붙입니다.
hp += heal;
if (hp > maxHp) hp = maxHp; // 최대치 제한
if (hp < 0) hp = 0; // 최소치 제한(음수 방지)
double b = 7 / 2;는 3.5가 아니라 3일까?a = hp++;와 a = ++hp;의 차이를 “값을 쓰는 시점”으로 설명할 수 있을까?