2021.06.08
2. 데이터 갖고 놀기
문법에 집착하지 말자
2.1 정수 형식
main 함수는 프로그램 전체에서 하나만 써야 한다.
변수 : 데이터를 저장하는 바구니
보통 게임 아이디는 long에 저장한다.

attack 변수를 byte라고 정의하고
attack--;로 설정하면
byte는 0에서 255값이므로
attack=0일 때 attack--;는 -1이 되지 않고
rotation으로 255로 돌아가게 된다.
결국 간디라는 캐릭터는 공격성이 0 이었다가
255로 갑자기 공격력 최대가 되는 에러가 나타난다.
출력값은 255가 뜬다.
2.2 진수

2진수 : shift, 비트 연산에 쓰인다.
16진수 : 2진수로 쓰게 되면 문자가 너무 길어지므로 2진수와 변환하기 쉽게 16진수로 쓴다.
2→ 16 진수 일때 4개씩 끊어서 변화해주면 된다.
2.3 이진수 표현, 정수 범위의 비밀
2.3.1 byte
8bits = 1byte
1111 1111 = 255 이므로 byte는 최대 0에서 255까지 표현가능하다.


2.3.2 sbyte
반면 부호가 있는 마이너스 값(sbyte)은
*000 0000에서 맨 왼쪽에 있는 *로 부호를 표현한다.
예를 들어 58을 -58로 변환하는 과정은

0b 0011 1010 > 모든 숫자를 뒤집는다 : 0b 1100 0101 > 1을 더한다 : 0b 1100 0110

2.4 문자 형식


2.5 형식 변환 -------------------> 다시 보기!

overflow : 초과하여 에러가 남, underflow : 부족하여 에러가 남
2.6 데이터 연산
2.6.1 사칙연산
+ - * / %
++위치에 따른 차이 정확하게 알기 hp++; VS ++hp;
hp--; VS --hp;
전위 증가 ++i i의 값을 1 증가시킨 후에 증가된 값을 return |
int i = 1; int j = ++i; printf("i:%d, j:%d", i, j); 출력 : i:2, j:2 |
후위 증가 i++ i의 값을 1 증가시킨 후에, 증가되기 전의 값을 return |
int i = 1; int j = i++; printf("i:%d, j:%d", i, j); 출력 : i:2, j:1 |
2.6.2 비교 연산
< > <= >= != ==

2.6.3 논리연산
&& AND
|| OR
! NOT

2.7 비트연산
2.7.1 쉬프트연산
1) 정의
<< : 비트가 왼쪽으로 특정 칸씩 이동한다.
>> : 비트가 오른쪽으로 특정 칸씩 이동한다.

2) 웬만하면 마이너스 값은 int 대신 uint를 사용하자
num >> 3;
int num = 0b 1000 0000; 일 때
맨 왼쪽 1을 그대로 두고 1 이동
num = 0b 1001 0000
3) 쉬프트 연산을 사용하는 이유
int id; 에서
1100 0000 0000 0000 라는 상황에서 굉장히 큰 수를 바로 쓰지 않고
쉬프트 연산을 사용하여 0b11(작은 수) << 14; 를 이용하여 표시한다.
2.7.2 비트연산
&(and) : 모두 1일 때만 1, 나머진 0
|(or) : 1이 하나라도 있으면 1, 나머진 0
~(not) : 반대로 써주기
^(xor) : 둘을 비교했을 때 다르면 1, 같으면 0
2) 쓰임
&, | 은 아이디의 비트값을 조합시킬 때 사용
^(xor)은 id를 임의의 변수 key로 암호화 할 때 사용한다.
^(xor) 를 두번 하면 원래 값으로 돌아온다는 것을 이용함, key값은 비공개.

네트워크 상에는 a = id^key 값을 알려준다. a값을 알아도 key 값을 모르므로 알고 싶은 id값은 알 수 없다.
2.8 데이터 마무리
1) 연산의 생략


2) 연산자들의 우선순위를 외우지 말고 가로 ( )를 활용하여 코드가 명확히 보이도록 쓰자

3) var 변수 유형은 웬만하면 쓰지말고 다른 사람도 알아볼 수 있도록 때에 맞는 변수 유형을 쓰자


'기타 > UNITY MMORPG 게임 개발' 카테고리의 다른 글
[PART1] 1. 개론 (0) | 2021.06.08 |
---|