오늘은 논리 연산자에 대해 포스팅해볼까 합니다.
안녕하세요!! @wonnieyoon입니다.
<p dir="auto">c,c++ 언어들에서 비트 논리 연산자를 배우게 됩니다.<br />
그런데 이런 논리를 가지고 있구나는 알겠는데 직접적인 경험은 없는 경우가 많더라구요.<br />
오늘은 간단하게 비트논리 연산자를 게임에 적용해 보겠습니다.
<p dir="auto">RPG 게임을 하게 되면 기본적으로 빠질수 없는 요소가 있죠!!<br />
그건 바로 '버프' 인데요.
<p dir="auto">버프를 구성하는 방법에 대해 간단하게 포스팅해보겠습니다.
<p dir="auto">c++에서 int는 4Byte(=32bit)를 차지합니다.<br />
그럼 2진수로는 32자리 , 16진수로는 8자리를 나타낼수 있다는 말이죠.<br />
이정도만 알아 두시고 코드를 설명하겠습니다.
<p dir="auto">int main()<br />
{<br />
// 먼저 const를 붙이는 이유는 iAttack등의 변수는 특정 버프의 고유값을 가지게<br />
// 되는데 만약 프로그래머가 실수로 변수에 값을 바꿀수 있기 때문에 상수화 시켜놓기<br />
// 위해서 const를 붙입니다.
<pre><code>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;
<p dir="auto">}<br />
그런데 비트논리 연산자를 왜 사용할까요?<br />
그냥 배열을 사용해서 충분히 버프를 표현할수 있을것 같은데?<br />
비트논리 연산자는 이진수 연산을 하기 때문에 일반적인 연산보다 컴퓨터가<br />
빠르게 연산을 할수 있기 때문에 속도의 이유로 사용합니다.
<p dir="auto">또한 XOR의 사용으로 버프를 없앴다 만들었다 할수있습니다. ( on ,off)<br />
iBuf ^= iHP;<br />
=> 10101 ^ 00100 = 10001<br />
Buf의 목록에서 HP는 사라지게 됩니다.
<p dir="auto">하지만 다시<br />
iBuf ^= iHP;<br />
=> 10001 ^ 00100 = 10001 이 됩니다. ㅎㅎ
(jjangjjangman 태그 사용시 댓글을 남깁니다.)
호출에 감사드립니다! 즐거운 스티밋하세요!