내배캠/C++

비트 연산자

동그래님 2024. 12. 30. 11:18

비트 연산자  /  '&'

 

두 정수의 이진수 표현에서 같은 자리의 비트를 비교하여, 두 비트가 모두 1일 때만 '1'을 반환하고 나머지 경우에는 '0'을 반환하는 연산자이다.

  • 하드웨어 수준에서 작동하므로, 산술 연산보다 빠르다.
  • 특정 비트만 다루는 작업에서 간결하고 명확하다.
  • 비트 단위로 데이터를 조작하거나 검사할 수 있다.

 

*비트 And연산자를 활용해 홀수인지, 짝수인지 확인

int n = 7;

if (n & 1)
{
	cout << "n은 홀수 입니다.";
}
else
{
	cout << "n은 짝수 입니다.";
}

 

 

 

 

비트 연산자  /  '>>' , '<<'

'>>' 이 비트 연산자는 "오른쪽으로 비트를 이동" 시키는 연산이다. 

a >> b 라고 한다면 숫자 a의 비트를 오른쪽으로 b만큼 이동시키는 연산을 의미하고 결과적으로는 a를 2의 b 제곱으로 나눈 몫과 같아진다는 것을 확인할 수 있다.

반대로  a << b 라고 한다면 숫자 a의 비트를 왼쪽으로 b만큼 이동시키는 연산을 의미하고 a에 2의 b 제곱을 곱한 것과 같다.

 

말이 어려운데 쉽게 예제를 통해 살펴보자.

*8 >> 1 

00001000 (8) >> 1 = 00000100 (4)

숫자 8의 이진수는 00001000 이고 '>> 1'을 적용한다면 00000100이 되고 값은 4가 된다.

 

*16 >> 2 

16 = 00010000 >> 2 = 00000100 (4)

16의 비트를 오른쪽으로 2만큼 이동시켰을 때, 16을 2의 2제곱으로 나눠 4가 되는 것을 확인 할 수 있다.

 

*5 >> 1

5 = 00000101 >> 1 = 00000010 (2)

5의 비트를 오른쪽으로 1만큼 이동시켰을 때, 5를 2로 나눠 2가 되는것을 확인할 수 있다.

 

나눗셈 연산 'a / 2'와 'a >> 1'은 동일한 결과를 도출하지만 비트 연산을 사용하는 이유는 속도와 효율성 때문이다.

https://dong-grae.tistory.com/89 코트카타를 하던 중 다른 사람 코드 리뷰를 해보다가 비트 연산자를 적극적으로 사용한 사람이 있었는데, 확실히 코드가 간결해보이고 속도도 빨랐다.

 

 

 

 

 

*추가적인 비트 연산에 대해 정리할 예정.