목록언리얼 개발자 (18)
연습장
주제: 비트 연산과 비트 플래그 비트 연산 비트연산이 언제 필요한가? 사용 빈도가 높진 않지만 아주 가끔 사용된다. 비트 단위의 조작이 필요할 때 (게임 서버에서 아이디를 만들 때 비트플래그(대표적) ~ bitwise not 단일 숫자의 모든 비트를 대상으로 0은 1, 1은 0 모든 비트를 거꾸로 뒤집는다. & bitwise and 두 숫자의 모든 비트 쌍을 대상으로 and를 한다. 두 숫자가 1이면 1 | bitwise or 두 숫자의 모든 비트 쌍을 대상으로 or를 한다. 둘 다 0이 아니면 1 ^ bitwise xor 두 숫자의 모든 비트 쌍을 대상으로 xor을 한다. 두 숫자가 같으면 0 다르면 1 같은 숫자 두개를 xor 연산 해주면 모든 비트가 0000 0000 으로 나온다. 비트 시프트 > ..
주제: 비교 연산과 논리 연산 비교연산이 언제 필요한가? 체력이 0이 되면 사망한다, 체력이 30% 이하이면 궁극기를 발동한다. (100*hp/maxHp), 경험치가 100 이상이면 레벨업을 한다. 비교 연산 a == b a와 b의 값이 같은가? 같으면 1, 다르면 0 a != b a와 b의 값이 다른가? 다르면1, 같으면 0 a > b a가 b보다 큰가? a > = b a가 b보다 크거나 같은가? a < b a가 b보다 작은가? a b); isSmaller = (a < b); } 논리연산이 언제 필요한가? 조건에 대한 논리적 사고가 필요할 때, 하나의 정보가 아닌 여러 정보를 조합하여 최종 판단을 해야하는 상황일 때 로그인할 때 아이디도 같고 And 비밀번호도 같아야 한다. ( 두가지 조건을 동시에 만..
주제: 데이터 연산 / 데이터를 가공하는 방법에 대해 알아보자. int a = 1; : 1이라는 데이터를 a라는 바구니(메모리)에 할당한다. int b = 2; : 2라는 데이터를 a라는 바구니(메모리)에 할당한다. 산술연산자 대입연산 a = b; : a에 b를 대입하고 b를 반환하라. (b라는 바구니 안에 있는 값을 a라는 바구니 안에 복사한다. 사칙연산 a = b + 3 덧셈 add a = b - 3 뺄셈 sub a = b * 3 곱셈 mul a = b / 3 나눗셈 div a = b % 3 나눗셈(나머지) div 사칙연산이 필요할 때: 데미지를 계산할 때, 체력을 깎을 때, 루프문에서 카운터를 1증가 시킬 때 등 a += 3 a = a + 3 a -= 3 a = a - 3 a *=3 a = a * ..
주제: 문자와 문자열 bool은 그냥 정수지만, 참/거짓을 나타내기 위해 사용한다 했었다. 사실 char도 마찬가지이다. 그냥 정수지만 '문자'의 의미를 나타내기 위해 사용한다. char : 알파벳, 숫자, 문자를 나타낸다. wchar_t : 유니코드 문자를 나타낸다. (_t == _type의 약자) ASCII코드 (정보교환을 위한 미국표준 코드) : '문자'의 의미로 작은 따옴표 ' '를 사용한다. #include using namespace std; char ch1 = 97; char ch2 = 'a'; char ch3 = '1'; char ch4 = 'a'+1; int main(){ cout
주제: 불리언(bool)과 실수 불리언(boolean)은 참과 거짓 두가지만 갖고 있는 형식이다. bool isHighLevel = true; //고렙이 맞는지 bool isPlayer = true; //유저가 맞는지 bool isMale = false; //캐릭터가 남자가 맞는지 불리언은 그냥 1바이트 정수에 불과하다. true는 0, false는 1의 값을 가지고 있다. 그렇다면, 왜 정수 시간에 불리언을 다루지 않았을까? => 어셈블리에서 불리언이라는 것은 없음 불리언만 봐도 참/거짓 둘 중 하나라는 힌트를 준다(가독성) int main(){ // 아래처럼 표현해도 되지만 // 여성 갯수? 뭔 말이지? 하는 상황이 올수도 있음 if(isFemale != 1) { //TODO } } int main(..
주제: 정수 주석처리: Comment (Ctrl + K 누른 후 C) / UnComment(Ctrl + K 누른 후 U) ① //이렇게 주석을 달 수 있다. ② /*주석이 여러줄이면 이렇게 달 수 있다. */ 변수 선언 방법 (귀찮지만 적절하게 잘 골라줘야 함) ① [타입][이름]; ② [타입][이름] = [초기값]; char형 1바이트 (-128~127) short형 2바이트 (-32,768~32,767) int형 4바이트 (-21.4억~21.4억) __int64형 / long long형 8바이트 (어마어마하게 큼) signed / unsigned 변수 앞에는 항상 signed가 생략되어 있다. unsigned char형 1바이트 (0~255) unsigned short형 2바이트 (0~65,536) ..
7. 시프트(shift)연산과 논리(logical)연산 시프트 연산 한칸씩 밀겠다 10진수 기준으로 보면(부호가 음수가 아니라는 가정하에) 곱하기2를 한 것과 똑같음 mov eax, 0x12345678 PRINT_HEX 4, eax shl eax, 8 PRINT_HEX 4, eax shr eax, 8 PRINT_HEX 4, eax 시프트 연산 : 왼쪽이나 오른쪽으로 한 칸씩 밀어주는 부호가 음수가 아니라는 기준 하에 시프트 연산으로 왼쪽으로 당기는 행동 자체는 곱하기 2를 한것과 동일함 곱셈 나눗셈을 시프트 연산으로 빠르게 처리할 수 있음(간접적으로 사용) 게임서버에서 objectID를 만들어 줄 때 (직접적으로 사용) 논리 연산 not and or xor 비트 논리 연산자 조건 A : 잘생겼다 조건 B..
4. 변수와 레지스터 *메모리 레지스터 mov rax, a ; a라는 바구니의 주소값을 rax에 복사 mov rax, [a] ; a라는 바구니 안에 있는 값을 rax에다 복사 *변수의 선언 및 사용 변수: 데이터를 저장하는 바구니 처음에 바구니를 사용한다고 선언(이름과 크기 지정) * 메모리에는 구분할 수 있도록 주소(번지수)가 있다 고정적X 실행할 때 마다 변화O **초기화 된 데이터 변수이름, 크기, 초기값 크기 db(1) dw(2) dd(4) dq(8) section .data a db 0x11 b dw 0x2222 c dd 0x33333333 d dq 0x4444444444444444 **초기화 되지 않은 데이터 변수이름, 크기, 개수 크기 resb(1) resw(2) resd(4) resq(8)..