bit shift operator (>>, <<)
- bit shift operator : 말 그대로 비트를 이동시키는 연산자.
- ex)
a = 10000000(2)이고, a >> 3을 하면
a = 00010000(2)가 된다.
마찬가지로
b = 00000001(2)이고, b << 3을 하면
b = 00001000(2)가 된다.
- 겨우 이거 쓸려고 글 썼냐??
- 그건 아니고, bit shift 연산자를 쓸 때 주의해야 할 점 및 tmi 이것저것 쓸라고.
- C Standard (ISO/IEC 9899:201x)
- bit shift operator의 피연산자의 자료형?
- 자료형? 이라기 보다 integer type이어야 한다고 쓰여있음. 즉, float나 double같은 것들은 안 된다는 뜻.
- 먼저 연산자가 적용되기 전에, 각 피연산자들에는 integer promotion이 이루어진다.
- integer promotion : int 범위 내로 표현 가능하면, int 형으로 promotion, 그렇지 않으면 unsigned int로 promotion된다.
- 연산 결과는 left operand의 자료형이 된다.
- right operand가 음수이거나 promoted left operand의 width보다 크거나 같으면 UB이다.
- E1 << E2인 경우, 새로 추가되는 비트들은 0으로 채워진다.
- E1이 unsigned type이라면, 결과값은 E1 x 2^E2 mod (result_max + 1)가 된다.
- E1이 signed type이고, nonnegative이고, E1 x 2^E2가 표현 가능한 범위에 속한다면, 결과값은 E1 x 2^E2가 되고, 그렇지 않아면 UB이다.
- E1 >> E2인 경우
- E1이 unsigned type이거나 signed type이면서 nonnegative라면, 결과값은 E1 / 2^E2의 몫의 정수부분에 해당한다.
- E1이 signed type이면서 negative value라면 결과는 implementation-defined이다.