비트단위 시프트 연산자
비트단위 시프트 연산자는 비트들을 왼쪽으로 또는 오른쪽으로 이동시킨다.
왼쪽으로 시프트 : <<
왼쪽으로 시프트 연산자(<<)는, 왼쪽 피연산자의 비트들을 오른쪽 피연산자가 지정하는 자릿수만큼 왼쪽으로 이동시킨다. 비워지는 위치들은 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)을 사용한다.
'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 |