bit shift operator (>>, <<)

dandb3·2023년 4월 26일
0

이것저것 TMI

목록 보기
7/17
  • 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이다.
profile
공부 내용 저장소

0개의 댓글