비트논리 연산자 어디에 사용할까?
안녕하세요!! 입니다.
오늘은 논리 연산자에 대해 포스팅해볼까 합니다.
c,c++ 언어들에서 비트 논리 연산자를 배우게 됩니다.
그런데 이런 논리를 가지고 있구나는 알겠는데 직접적인 경험은 없는 경우가 많더라구요.
오늘은 간단하게 비트논리 연산자를 게임에 적용해 보겠습니다.
RPG 게임을 하게 되면 기본적으로 빠질수 없는 요소가 있죠!!
그건 바로 '버프' 인데요.
버프를 구성하는 방법에 대해 간단하게 포스팅해보겠습니다.
c++에서 int는 4Byte(=32bit)를 차지합니다.
그럼 2진수로는 32자리 , 16진수로는 8자리를 나타낼수 있다는 말이죠.
이정도만 알아 두시고 코드를 설명하겠습니다.
int main()
{
// 먼저 const를 붙이는 이유는 iAttack등의 변수는 특정 버프의 고유값을 가지게
// 되는데 만약 프로그래머가 실수로 변수에 값을 바꿀수 있기 때문에 상수화 시켜놓기
// 위해서 const를 붙입니다.
const int iAttack = 0x00000001; //1 (2진수) // 공격버프
const int iArmor = 0x00000002; //10 // 방어버프
const int iHP = 0x0000004; //100 // HP 버프
const int iMP = 0x0000008; //1000
const int iCritical = 0x00000010; //10000
int iBuf = iAttack | iHP | iCritical;
// iAttack | iHP => 00001 | 00100 => 00101
// 00101 | iCritical => 10101
// 10101 & 00001 = 1
cout << (iBuf & iAttack) << endl; //=> attack 버프가 있다는 의미
// 10101 & 00010 = 0
cout << (iBuf & iArmor) << endl; //=> 0 방어 버프가 없다는 의미
// 10101 & 00100 = 4
cout << (iBuf & iHP) << endl; //=> HP 버프가 있다는 의미
// 10101 & 01000= 0
cout << (iBuf & iMP) << endl; //=> 0 MP 버프가 없다는 의미
// 10101 & 10000 = 0
cout << (iBuf & iCritical) << endl; //=> Critical 버프가 있다는 의미
return 0;
}
그런데 비트논리 연산자를 왜 사용할까요?
그냥 배열을 사용해서 충분히 버프를 표현할수 있을것 같은데?
비트논리 연산자는 이진수 연산을 하기 때문에 일반적인 연산보다 컴퓨터가
빠르게 연산을 할수 있기 때문에 속도의 이유로 사용합니다.
또한 XOR의 사용으로 버프를 없앴다 만들었다 할수있습니다. ( on ,off)
iBuf ^= iHP;
=> 10101 ^ 00100 = 10001
Buf의 목록에서 HP는 사라지게 됩니다.
하지만 다시
iBuf ^= iHP;
=> 10001 ^ 00100 = 10001 이 됩니다. ㅎㅎ
Leave 비트논리 연산자 어디에 사용할까? to:
Read more #kr-dev posts
Best Posts From 워니
We have not curated any of wonnieyoon's posts yet. But you can encourage our curation team to review posts by visiting them regularly and by referring other readers. Because we give priority to frequently read content.
More Posts From 워니
- c언어 절대값 구하기 abs()
- 32bit vs 64bit 컴퓨터와 포인터!!
- 문자셋의 종류와 특성에 대해 알아보자!
- 우리가 실행하는 프로그램 어떻게 만들어질까?
- [MFC] LPSTR,LPCSTR,LPCTSTR .. 과연 무엇인가?
- 알고리즘 : 선택 정렬(Selection Sort)
- 비트논리 연산자 어디에 사용할까?
- "적당한 음주는 건강에 좋아" 라는 말 들어보셨죠?
- 새가 아닌 거미도 하늘을 날수있다?
- 알면 알수록 놀라운 식물의 위장술!!
- 피부주름이 잘 생기는 혈액형은 B?
- 하루 마무리는 시 한편 #2. 백년
- 하루 마무리는 시 한편 #1. 사랑의 물리학
- 버퍼(Buffer)와 버퍼링(Buffering)
- 진드기 말고 진딧물 아시나요?
- Compile의 과정!!
- Window DLL 개념 및 사용이유?
- 16진법 왜 사용할까?
- 고팍스 & CoinEx 이벤트 !! 많은 참여하세요.
- 구로디지털단지 멘무샤~~