더북(TheBook)

TAKEAWAY 5.59 부호 있는 산술에서 부정 연산을 수행하면 오버플로가 발생할 수 있다.

부호 있는 타입에서 비트 연산은 바이너리 표현을 기준으로 처리한다. 그래서 비트 연산의 값은 특히 부호 표현에 따라 달라진다. 실제로 비트 연산으로 부호 표현을 감지할 수도 있다.

char const* sign_rep[4] =
{
  [1] = "sign and magnitude",
  [2] = "ones' complement",
  [3] = "two's complement",
  [0] = "weird",
};
enum { sign_magic = -1&3, };
...
printf("Sign representation: %s.\n", sign_rep[sign_magic]);

시프트 연산을 사용하다 보면 코드가 금세 지저분해진다. 음수에 대한 시프트 연산을 수행할 때의 의미가 불분명하기 때문이다.

TAKEAWAY 5.60 비트 연산에서는 부호 없는 타입을 사용한다.

신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.