안선생의 개발 블로그

C++ 4. define/ 비트 연산자 본문

C++

C++ 4. define/ 비트 연산자

안선생 2022. 5. 25. 21:43

1. 쉬프트 연산자

종류 : << , >>

기능 : 비트를 화살표가 가리키는 방향으로 민다.

예)

 

byte의 변숫값은

이렇게 된다.

여기서

 

이렇게 하면

왼쪽으로 한 칸 가면

 

 

이렇게 된다.

왼쪽으로 한번 옮기니 2배가 됐다.


그래서 대입 연산자와 합쳐서 표현하면

이렇게 해주면 byte 안에 있는 값이 두 배 돼서 다시 받는 것이다.

이것을 축약한 것

만약

를 하면 원래 들어있던 값의 4배가 된다. (2²)​

3칸 밀면 8배가 된다. (2³)

결론은

일 때 byte의 숫자가 2n 곱한 수이다.

반대로

오른쪽으로 옮기면 나누기 2이다. 

결과 적으로

일 때 byte의 숫자가  곱한 수이다.

 

일 때 byte의 숫자가 2n 나눈 몫이다.


2. 비트 연산자

종류 : 비트 곱 (&) , 합 (|) , xor (^) , 반전 (~)

뜻 : 논리 연산은 두 변수의 전체 결괏값을 확인하고 반환한 것이지만

비트 단위 연산자는 비트 단위로 비트끼리 하나씩 하나씩 연산하는 것이다.

기능 :

비트 곱 (&) : 둘 다 1인 경우 1

비트 합 (|) : 둘 중 하나라도 1 이면 1

반전 (~) : , 1은 0으로, 0은 1로

xor (^) : 같으면 0, 다르면 1

 

예)

 

​상태를 나타낼 떄 자주 사용

#include<iostream>
#define a 0x01 // 1
#define HUNGRY 0x02 // 2
using namespace std;

int main()
{
int c = 0;

c |= HUNGRY; // HUNGRY의 상태를 c에다가 넣음  하나라도 넣으면 1이기 때문에 0000 0010이 나옴

if (c & HUNGRY) // 상태를 확인 하는 방법 c에는 0000 0010 이 있고 HUNGRY도 똑같기 때문에 참이 나와 배고픔이 출력됨
{
cout << "배고픔";
}
return 0;
}

특정 자리 비트 제거법

c &= ~HUNGRY;

 

 

뺸다고 해보자 2를 먼저 ~(반전) 시키면

이렇게 나올것이다.

여기서 &(곱)을 해주면 둘다 1이여만 1의 값이 나오므로

뺀 값이 나오게 된다.

결론은 비트를 특정부의를 빼고 싶을때 뺄 수를 ~(반전)시키고 두 수를 &(곱)해주면 된다.

ex) c &= ~HUNGRY;

 

(3) define

전처리기 : 먼저 처리해 주는 것, #키워드가 붙은 것들, 이것들은 모든 컴파일 중 가장 처음 한다.

기능 : 내가 지정한 구문을 특정 숫자로 치환을 해준다.

형태 :

#define 이름 숫자

예)

 

일 때 a 는 1 이 된다.

여기서

 

이렇게 하면 b에 1이 들어간다.

이 위쪽에서 define이라는 전처리기로 정의를 해놓은 거다.

이유 :

컴파일러는 define 구문 전처리기이니 먼저 실행해야 한다.

define 구문의 HUNGRY라는 코드를 숫자 1로 바꿔라는 뜻이다.

결과적으로 b에 1을 넣은 것이다.

define의 장점

1) 가독성

2) 변경하기가 쉬움(유지 보수).

출처 : https://www.youtube.com/c/AssortRockGameAcademy

'C++' 카테고리의 다른 글

C++ 함수  (0) 2022.05.27
C++ 5. 변수  (0) 2022.05.26
C++ 3. 조건문(if,switch),삼항 연산자  (0) 2022.05.24
C++ 2. 연산자  (0) 2022.05.23
C++ 1. 자료형  (0) 2022.05.21