トップC言語入門 > シフト演算

シフト演算

1.C言語のシフト演算

負数の右シフトに注意を要する。 負数の右シフト結果は負数(または0)とするため、 左端のビットを1とするコンパイラが多いようだが、 規格上は、左端のビットを 0 とすることもできる (負数の右シフトは正数または0になる)。 このようなあいまいさがあるため、負数の右シフトは使わない方が無難とされる。

int main() {
  int a = 12, b = -34;

  printf("%d << 2 = %d\n", a, a << 2);
  printf("%d >> 2 = %d\n", a, a >> 2);

  printf("%d << 2 = %d\n", b, b << 2);
  printf("%d >> 2 = %d\n", b, b >> 2);
}
c:\mh\www\c01\shiftoperation>shift01
12 << 2 = 48
12 >> 2 = 3
-34 << 2 = -136
-34 >> 2 = -9