비트논리연산자와 쉬프트연산자

Jaemyeong Lee·2024년 8월 15일
0

어소트락2017

목록 보기
5/20

비트 논리 연산자와 쉬프트 연산자: 코드 분석 및 설명

비트 논리 연산자

비트 논리 연산자는 이진수(2진수) 단위로 연산을 수행합니다. 여기서 &, |, ^ 연산자 등이 사용되며, 각 비트에 대한 논리 연산을 통해 새로운 값을 생성합니다.

코드 분석: 상수 정의 및 비트 연산

const int iAttack	= 0x00000001;		// 16진수 1, 2진수로는 0001
const int iArmor	= 0x00000002;		// 16진수 2, 2진수로는 0010
const int iHP		= 0x00000004;		// 16진수 4, 2진수로는 0100
const int iMP		= 0x00000008;		// 16진수 8, 2진수로는 1000
const int iCritical = 0x00000010;		// 16진수 10, 2진수로는 10000
  • 상수는 변하지 않는 값을 의미하며, 선언과 동시에 값을 지정해야 합니다.
  • 이 코드에서는 각 상수를 16진수로 지정하였고, 각 값은 2진수로 쉽게 변환할 수 있습니다.

비트 OR 연산 (|) 적용

int iBuf = iAttack | iHP | iCritical;
  • iBuf 변수에 iAttack, iHP, iCritical을 OR 연산으로 결합합니다.
  • 각 비트별 OR 연산을 수행하여, 결과는 10101(2진수) = 0x15(16진수)가 됩니다.

비트 XOR 연산 (^) 적용

iBuf ^= iHP;
  • XOR 연산을 통해 iBufiHP 부분을 반전시킵니다.
  • 초기 iBuf 값은 10101(2진수)였고, iHP는 00100(2진수)이므로 XOR 연산 후 결과는 10001(2진수)이 됩니다.

AND 연산을 이용한 결과 출력

cout << "Attack : "<< (iBuf & iAttack) << endl;
cout << "Armor : " << (iBuf & iArmor) << endl;
cout << "HP : " << (iBuf & iHP) << endl;
cout << "MP : " << (iBuf & iMP) << endl;
cout << "Critical : " << (iBuf & iCritical) << endl;
  • 각 비트별 AND 연산을 통해 특정 기능이 활성화되어 있는지 확인합니다.
  • iBuf & iAttack의 결과는 1이므로, "Attack"은 활성화되어 있습니다.
  • 다른 비트도 마찬가지로 연산하여 결과를 출력합니다.

쉬프트 연산자

쉬프트 연산자는 비트의 위치를 좌측(<<) 또는 우측(>>)으로 이동시켜 값을 변환합니다. 이 연산자는 주로 고속 계산이나 특정 비트를 추출하는 데 사용됩니다.

쉬프트 연산자 예제 분석

int iHigh = 187;
int iLow = 13560;
int iNumber = iHigh;

iNumber <<= 16;  // iNumber를 왼쪽으로 16비트 이동시켜 상위 16비트를 채움
iNumber |= iLow; // 하위 16비트를 iLow 값으로 채움
  • iHigh 값인 187(10진수)을 iNumber에 저장하고, 이 값을 왼쪽으로 16비트 이동시킵니다.
  • 이동 후 iNumber는 187이 상위 16비트에 위치하게 됩니다.
  • 이후 iLow 값을 OR 연산으로 하위 16비트에 채웁니다.

결과 출력

cout << "High : " << (iNumber >> 16) << endl;
cout << "Low : " << (iNumber & 0x0000ffff) << endl;
  • iNumber의 상위 16비트를 얻기 위해 우측으로 16비트 쉬프트한 후 출력합니다.
  • 하위 16비트를 얻기 위해 0x0000ffff와 AND 연산을 수행합니다.

전치 연산자와 후치 연산자

전치(++iNumber)와 후치(iNumber++) 연산자는 변수의 값을 1씩 증가시키지만, 적용되는 시점에 차이가 있습니다.

  • 전치 연산자는 값이 증가된 후에 연산이 수행됩니다.
  • 후치 연산자는 기존 값을 먼저 사용한 후에 값이 증가됩니다.

전치와 후치 연산자 예제

iNumber = 10;
cout << ++iNumber << endl;  // 11 출력, iNumber는 11로 증가
cout << iNumber++ << endl;  // 11 출력, 이후 iNumber는 12로 증가
cout << iNumber << endl;    // 최종적으로 12 출력
  • 첫 번째 출력에서 전치 연산자에 의해 iNumber가 11이 됩니다.
  • 두 번째 출력에서는 후치 연산자에 의해 현재 값인 11이 출력된 후, iNumber는 12로 증가합니다.
  • 마지막 출력에서는 최종 증가된 값 12가 출력됩니다.

결론

이번 포스트에서는 비트 논리 연산자와 쉬프트 연산자의 기본 개념과 활용 방법을 예제를 통해 이해했습니다. 또한 전치와 후치 연산자의 차이를 코드로 확인함으로써 연산자가 어떻게 동작하는지에 대한 이해를 높였습니다. 이러한 연산자들은 고성능 프로그래밍이나 하드웨어 제어와 같은 분야에서 매우 유용하게 사용되므로, 기본 개념을 잘 이해하고 다양한 응용을 시도해보는 것이 중요합니다.

수강

  • 2024-08-15
profile
李家네_공부방

0개의 댓글