728x90

비트단위 시프트 연산자

비트단위 시프트 연산자는 비트들을 왼쪽으로 또는 오른쪽으로 이동시킨다.

 

왼쪽으로 시프트 : <<

왼쪽으로 시프트 연산자(<<)는, 왼쪽 피연산자의 비트들을 오른쪽 피연산자가 지정하는 자릿수만큼 왼쪽으로 이동시킨다. 비워지는 위치들은 0으로 채워진다. 왼쪽 끝을 지나 밖으로 밀려나는 비트들은 사라진다.

(10001010) << 2

(00101000)

이 연산은 새로운 비트값을 만들지만 피연산자를 변경시키지 않는다.

변수값을 실제로 변경시키려면 왼쪽으로 시프트-대입 결합 연산자(<<=)를 사용할 수 있다. 이 연산자는  왼쪽 피연산자로 주어진 변수의 비트들을 오른쪽 피연산자가 지정하는 자릿수만큼 왼쪽으로 이동시킨다.

ex)

int stonk = 1;

int onkoo;

onkoo = stonk << 2;                   //onkoo에 4를 대입한다.

 

stonk <<= 2;                            //stonk를 4로 변경한다.

 

오른쪽으로 시프트 : >>

오른쪽으로 시프트 연산자(>>)는, 왼쪽 피연산자의 비트들을 오른쪽 피연산자가 지정하는 자릿수 만큼 오른쪽으로 이동시킨다. 오른쪽 끝을 지나 밖으로 밀려나는 비트들은 사라진다. 부호없는(unsigned) 데이터 형인 경우에, 왼쪽에 비워지는 위치들은 0 으로 채워진다. 결과값은 시스템에 따라 다르다. 왼쪽에 비워지는 위치들이 0으로 채워질 수도 있고, 부호 비트(제일 왼쪽 비트)가 복사되어 채워질 수 있다.

 

ex)

(10001010) >> 2                                //부호 있는값

(00100010)                                        //결과값 (일부 시스템에서)

(10001010)>>2                                 //부호 있는값

(11100010)                                       //결과 값(다른 시스템에서)

 

부호 없는 값의 경우에는 다음과 같다.

(10001010)>>2                                 //부호 없는값

(00100010)                                      //결과값(모든 시스템에서)

 

오른쪽 시프트-대입 결합 연산자 (>>=)는 왼쪽 피연산자로 주어진 변수의 비트들을 오른쪽 피연산자가 지정하는 자릿수만큼 오른쪽으로 이동시킨다.

int sweet = 16;

int ooosw;

 

ooosw = sweet >> 3;                             //ooosw = 2, sweet은 16

sweet >>= 3;                                       //sweet이 2

 

용도 : 비트단위 시프트 연산

비트 단위 시프트 연산자들은, 어떤 수를 2의 거듭제곱으로 곱하거나 나눌 때 편리하게 사용할 수 있습니다.

number << n  : number에 2의 n승씩 곱한다.

number >> n : number가 음수가 아니라면, number를 2의 n승씩 나눈다.

 

시프트 연산은, 10진수 체계에서 10을 곱하거나 10으로 나눌 때 소수점을 오른쪽 또는 왼쪽으로 이동시키는 것과 비슷하다.

 

CHAR_BIT 은 limit.h에 있는 매크로 이다. 이 매크로는 char에 있는 비트 수를 나타낸다. char 은 1byte 즉 8bit

CHAR_BIT은 8이다.

 

변수 n과 1개의 비트를 비교하려면 (0x1 & n)을 사용한다.

 

 

 

 

728x90

'Programming > C' 카테고리의 다른 글

C 비트 연산 - 정리  (0) 2019.07.10
C 비트 필드  (0) 2019.07.10
C언어 공부 37  (0) 2019.07.08
C언어 공부 36  (0) 2019.07.08
C언어 공부 35  (0) 2019.06.22

+ Recent posts