ビット演算子

1 の補数

変数値の1の補数。式の値は、2 進数での各桁で、変数の桁の値が 1 の場合には 0、0 の場合には 1 となります。

b = ~n;

例:

  char a='a',b;
  b=~a;
  Print("a = ",a, "  b = ",b);  
// 結果:
// a = 97   b = -98

右シフト

x の 2 進数表現が y 桁だけ右にシフトされます。シフトする値が符号なしの型の場合には論理右シフトが行われ、解放された左側のビットはゼロで満たされます。

シフトする値が符号付きの型の場合には算術右シフトが行われ、解放された左側のビットは符号ビットの値で満たされます(数が正であれば符号ビットの値は 0 で数が負であれば符号ビットの値は 1 )。

x = x >> y;

例:

  char a='a',b='b';
  Print("Before:  a = ",a, "  b = ",b);
//--- 右にシフトする
  b=a>>1;
  Print("After:   a = ",a, "  b = ",b);
// 結果:
// Before:  a = 97   b = 98
// After:   a = 97   b = 48

左シフト

xの 2 進数表現が y 桁だけ左にシフトされ、解放された右側のビットはゼロで満たされます。

x = x << y;

例:

  char a='a',b='b';
  Print("Before:  a = ",a, "  b = ",b);
//--- 左へシフトする
  b=a<<1;
  Print("After:   a = ",a, "  b = ",b);
// 結果:
// Before:  a = 97   b = 98
// After:   a = 97   b = -62

シフトされる変数の長さ以上の数でのシフトは結果が定義されていないために推奨されません。

AND ビット演算

x と y の 2 進数表現の AND ビット演算式の値は、2 進数での各桁の内、x とy 両方がゼロ以外を含む桁は 1( TRUE )、それ以外は 0( FALSE )となります。

b = ((x & y) != 0);

例:

  char a='a',b='b';
//--- AND 演算
  char c=a&b;
  Print("a = ",a,"  b = ",b);
  Print("a & b = ",c);
// 結果:
// a = 97   b = 98
// a & b = 96

OR ビット演算

y と x の 2 進数表現の OR ビット演算式の値は、2 進数での各桁のうち x または y がゼロ以外を含む桁は 1(TRUE)、それ以外は 0( FALSE )となります。式の値は、2 進数での各桁のうち x と y 両方がゼロ以外を含む桁は 1(TRUE)、それ以外は0( FALSE )となります。

b = x | y;

例:

  char a='a',b='b';
//--- OR 演算
  char c=a|b;
  Print("a = ",a,"  b = ",b);
  Print("a | b = ",c);
// 結果:
// a = 97   b = 98
// a | b = 99

XOR ビット演算

y と x の 2 進数表現の XOR ビット演算式の値は、2 進数での各桁のうち x と y が違う値を含む桁は1( TRUE )、それ以外は 0( FALSE )となります。

b = x ^ y;

例:

  char a='a', b='b';
//--- XOR 演算
  char c=a^b;
  Print("a = ",a,"  b = ",b);
  Print("a ^ b = ",c);
// 結果:
// a = 97   b = 98
// a ^ b = 3

ビット演算は 整数 のみに適用出来ます。

参照

優先順位のルール