[C/C++] 비트 연산자

HwangBBang·2023년 1월 18일
0

본 포스팅은 [C / C++] 진법과 비트와 연관되어있습니다. [C / C++] 진법과 비트를 보지 않으셨다면 보고오시는것을 추천드립니다.

비트 연산자

쉬프트

<<, >> 화살표가 가리키는 방향으로 한칸씩 민다.

2진수

0 0 0 0 0 0 0 1 2=10 \ 0 \ 0 \ 0 \ 0 \ 0 \ 0 \ 1 \ _2 = 1
shift ()×2\\ shift \ (\Leftarrow) \qquad \times 2
0 0 0 0 0 0 1 0 2=2\\0 \ 0 \ 0 \ 0 \ 0 \ 0 \ 1 \ 0 \ _2 = 2
shift ()×2\\ shift \ (\Leftarrow) \qquad \times 2
0 0 0 0 0 1 0 0 2=4\\0 \ 0 \ 0 \ 0 \ 0 \ 1 \ 0 \ 0 \ _2 = 4
shift ()×2\\ shift \ (\Leftarrow) \qquad \times 2
0 0 0 0 1 0 0 0 2=8\\0 \ 0 \ 0 \ 0 \ 1 \ 0 \ 0 \ 0 \ _2 = 8

10진수

210 = 2\qquad\quad 2 _{10} \ = \ 2
shift ()   ×10\\ shift \ (\Leftarrow) \ \ \ \times 10
2010 = 20\qquad\quad 20 _{10} \ = \ 20
shift ()   ×10\\ shift \ (\Leftarrow) \ \ \ \times 10
20010 = 200\qquad\quad 200 _{10} \ = \ 200
shift ()   ×10\\ shift \ (\Leftarrow) \ \ \ \times 10
200010 = 2000\qquad\quad 2000 _{10} \ = \ 200 0

10진수 에서 자릿수 하나가 올라간다. -> 10배 증가
2진수 에서 자릿수 하나가 올라간다. -> 2배 증가

소스코드

    // 쉬프트 <<, >> 화살표가 가리키는 방향으로 한칸씩 민다.
    
    // 2진수 에서 자릿수 하나가 올라간다. -> 2배 증가
    // 10진수 에서 자릿수 하나가 올라간다. -> 10배 증가

    int n ; 

    unsigned char byte = 1;
    
    byte = byte << 1; // 한 칸 민다.
    byte <<= 1; // 한 칸 민다. 2배 한다.
    byte <<= 3; // 세 칸 민다. 2^3배 한다.
    byte <<= n; // 2^n 배 한다.

    
    // >> 으로 밀때는 
    // 나누기  만약 나머지가 남는다면 ?
    // 주어진 구간밖으로 밀려남 -> 사라짐 
    
    byte = byte >> 1; // 한 칸 민다.
    byte >>= 1; // 한 칸 민다. 2으로 나눈 몫이된다.
    byte >>= 3; // 세 칸 민다. 2^3 으로 나눈 몫이된다.
    byte >>= n; // 2^n 으로 나눈 몫이된다.
    

비트 곱

& 비트간의 AND 연산이다.

10010011 & 10000001 = 1000000110010011 \ \& \ 10000001 \ = \ 10000001

비트 합

| 비트간의 OR 연산이다.

10010011  10000001 = 1001001110010011 \ | \ 10000001 \ = \ 10010011

비트 역

~ 비트간의 NOT 연산이다.

10010011 = 01101100\sim 10010011 \ = \ 01101100

특정 자리의 비트값 제거

특정 비트값을 제거하기위해선 많은 방법이 있다.
그 중에서 ~역 연산 후 &곱 연산을 하여 비트 값을 제거할 수 있다.

	unsigned int A;
    unsigned int B;
    
	A = A & (~B);
11101010 &= (00000010)111010\mathbf10 \ \&= \ (\sim 00000010)
11101010 &= (11111101)111010\mathbf10 \ \&= \ (11111101)
11101000111010\mathbf00

오류나 질문에 대한 문의 댓글 혹은 메일로 남겨주세요!

profile
https://hwangbbang.tistory.com/

0개의 댓글