비트논리 연산자 어디에 사용할까?

in #kr-dev7 years ago



오늘은 논리 연산자에 대해 포스팅해볼까 합니다. 안녕하세요!! @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 이 됩니다. ㅎㅎ
Sort:  

(jjangjjangman 태그 사용시 댓글을 남깁니다.)
호출에 감사드립니다! 즐거운 스티밋하세요!