비트 연산자 / '&'
두 정수의 이진수 표현에서 같은 자리의 비트를 비교하여, 두 비트가 모두 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 코트카타를 하던 중 다른 사람 코드 리뷰를 해보다가 비트 연산자를 적극적으로 사용한 사람이 있었는데, 확실히 코드가 간결해보이고 속도도 빨랐다.
*추가적인 비트 연산에 대해 정리할 예정.
'내배캠 > C++' 카테고리의 다른 글
디자인 패턴(Singleton Pattern) (0) | 2024.12.30 |
---|---|
std::toupper / std::tolower (0) | 2024.12.30 |
객체 지향적 설계 연습 (0) | 2024.12.27 |
std::rand / std::srand / std::time (0) | 2024.12.26 |
std::fixed / std::setprecision (0) | 2024.12.26 |