데이터를 메모리에 할당하고 가공하는 방법에 대해 알아봄
가공한 데이터를 이용해서 무언가를 하고 싶다면?
int hp = 100;
int damage = 100;
hp -= damage;
bool isDead = (hp <= 0);
몬스터가 죽었으면 경험치 추가
어셈블리에서 CMP jMP (값을 비교 후 플래그 여부에 따라 점프)
if (조건) 명령문
조건식이 0인지 아닌지 판단
if(isDead)
movzx eax, byte ptr [isDead] // 1바이트만 긁어오고, 나머지 3바이트는 0으로 채워줌.
test eax, eax // 0인지 아닌지
je main+95h(0DB5DB5h) // 0이면 점프
...
isDead == false와 !isDead는 같다.
if else
중복하여 test하지 않음. if 내부를 수행하면, else 부분을 건너뛰어야 함.
if else if else
if else { if else } 와 같음. 가독성 차이.
switch-case-break
switch (input)
mov eax, dword ptr [input]
mov dword ptr [ebp-0F4h], eax
cmp dword ptr [ebp-0F4h], 0
je main+60h (0375D8Dh)
cmp dword ptr [ebp-0F4h], 1
je main+98h (0375DB8h)
cmp dword ptr [ebp-0F4h], 2
je main+0C3h (0375DE3h)
jmp main+0EEh (0375E0Eh)
{
case ROCK:
cout << "바위를 냈습니다" << endl;
컴파일러 최적화할 때 switch가 더 유리하다.
switch문을 jump table로 구현하는 경우가 많기 때문에 if문 보다 좀 더 좋은 성능을 가지고, 컴파일러나 코드 상황에 따라 다르지만 보통 if문이 3개일 때까지는 if else가 더 빠르다고 한다.
switch문에는 정수 계열만 넣을 수 있다. (C#에서는 문자열도 가능)