정신과 시간의 방
작성일
2022. 11. 23. 18:23
작성자
risehyun
  • 비트 연산자
// 비트 연산자
// 시프트 <<, >>

unsinged char btye = 13;
byte <<= 3; // 값이 2^n의 배수가 됨, 즉 2^3 = 8
byte >>= 2; // 2^n으로 나눈 몫이 됨, 즉 2^2 = 4로 나눈 몫

// 비트곱 (&), 합(|), XOR(^), 비트 반전(~)
// 비트 단위로 연산을 진행함.
// & : 둘 다 1인 경우 1
// | : 둘 중 하나라도 1이면 1
// ^(XOR) : 같으면 0, 다르면 1(홀수 개의 1이 있으면 1)
// ~: 1은 0으로, 0은 1로 변환

// 비트 연산은 게임에서도 사용된다.
// EX. 툴, 프로그램에서 사용. Define과 함께 특정 상태 지정 시 유용하다.

 

  • Define
#define HUNGRY 1
int iStatus = HUNGRY; (=1을 할당한 것과 같은 결과가 됨)

// 전처리기 매크로 define을 사용하는 이유?
// 캐릭터의 상태가 여러개 있다면(중독, 화상) 이것들이 중첩될 수 있는데, 
// define을 사용하면 이를 혼동하지 않고 쓸 수 있다.
// 또한 수정할이 필요할 때도 define을 사용하면 미리 정한 값을 수정하기만 하면 되므로 편리하다.
// 즉, 코드의 가독성을 높일 수 있으며 유지보수가 용이해진다.


unsinged int iStatus = 0;
// 합연산을 사용한 상태 추가
iStatus 1 |= HUNGRY;
iStatus 1 |= THIRSTY;

// 상태 확인
if(iStatus & THIRSTY) // 곱연산으로 둘이 서로 같으면 1(True)가 된다.
{

}

// 특정 자리 비트 제거
iStatus &= ~THIRSTY; 
// 비트 곱으로 특정 자리 비트를 삭제한다.
// 비트 삭제 전에 원하지 않는 값이 1로 활성화되는 것을 막기 위해 먼저 비트 반전 (~)을 사용한다.
#define HUNGRY 	1 	// 0x1 (대부분 상태 나열은 16진수로 나타낸다.)
#define THIRSTY 2	// 0x2 (2의 배수로 증가함)
#define TIRED 	4 	// 0x4
#define FIRE	8 	// 0x8
#define COLD	16	// 0x10 (16진수는 16개 비트가 1개이므로 16부터는 0x10이 된다.)
					// F가 15에 해당하고, F+1부터는 다음 자리로 넘어감
#define POISION 32  // 0x20 (32는 16의 2묶음이므로 20이 됨)
#define BLIND   64  // 0x40
#define	HUNGRY		0x001
#define	THIRSTY 	0x002
#define	TIRED		0x004
#define FIRE		0x008

#define COLD		0x010
#define POISION 	0x020
#define 임의상태1 	0x040
#define	임의상태2	0x080

#define	임의상태3	0x100
#define	임의상태4	0x200
#define	임의상태5	0x400
#define	임의상태6	0x800

// 16진수로 나타내면 4개씩 끊어지는 규칙이 보인다.

'C,C++ > [강의] 어소트락 C++' 카테고리의 다른 글

함수와 재귀함수  (0) 2022.11.28
VS 단축키 및 편의사항  (0) 2022.11.25
함수, 반복문  (0) 2022.11.24
주석, 변수, 자료형, 연산자  (0) 2022.11.22
C++을 쓰는 이유  (0) 2022.11.22