[C++] 비트 연산과 쉬프트 (>>, <<)

2019. 7. 27. 20:56 기타/C++

[C++] 비트 연산과 쉬프트 (>>, <<)


1. 비트 연산


비트 단위 연산자(Bitwise Operators)는 비트의 수준에서 정보를 조작할 수 있게 해준다.

일반적으로 자주 사용하지는 않지만 화상이나 음성, 압축한 정보들을 다룰 때는 요긴한 기능이다.


비트 관점에서의 정보는 2진수로 표현된다.

실제 프로그래밍에서는 2진수로의 변환이 용이한 16진수를 많이 사용한다.

따라서 2진수, 10진수, 16진수의 관계와 변환을 알고 있어야 한다.


2진수와 10진수의 변환은 쉬울 것이다.


16진수에서 10진수 그리고 반대는 한번에 변환하기가 쉽지 않다

따라서 2진수로 변환 단계를 거치면 쉬워진다.


2진수를 16진수로 변환할 때는 4자리씩 묶어서 표시하면 된다.


2진수 : 1010110101

-> 뒤에서 4자리씩 묶고 모자라는 자리는 0으로 채운다.


2진수 :   (0010)  (1011)  (0101)

16진수 :   2           B         5


16진수에서 2진수로의 변환도 역으로 4자리씩 풀어내면 된다.


* 정수 값을 2진수로 출력

#include <bitset>
#include <iostream>
using namespace std;

int main(){

    char c = 1;   // 8비트
    short int si = 2; // 16비트
    int i = 4;   // 32비트

    cout << "c= " << bitset<8>(c) << "(" << (int)c << ")" << endl;
    cout << "si= " << bitset<16>(si) << "(" << si << ")" << endl;
    cout << "i= " << bitset<32>(i) << "(" << i << ")" << endl;

    return 0;
}


bitset 은 2진수 bit로 출력한다.





2. 비트 단위 논리 연산자 


비트 단위 논리 연산자는 피연산자의 각 비트에 대해서 논리 연산을 수행한다.


 피연산자1

피연산자2 

 결과

 AND(&)

OR(|) 

XOR(^) 

0

 1




3. 쉬프트 연산자


쉬프트 연산(Shift Operation)이란 비트를 몇 칸씩 옆으로 이동하는 연산을 말한다.


green >> 5;   -> green 변수의 값을 오른쪽으로 5비트 이동시킨다.


ex>

green : 0000001000100000

green >> 5 :  0000000000010001


반대로 << 는 왼쪽으로 비트를 이동한다


비트가 이동하면서 새롭게 채워지는 비트들은 0으로 채워진다.

하지만 음수의 값을 오른쪽으로 쉬프트 할 때는 1이 채워진다.



출처: https://hyeonstorage.tistory.com/307?category=601868 [개발이 하고 싶어요]