~

[Bitwise Operators]

説明

C++におけるビット否定演算子はチルダ文字 ~ です。& や | とは異なり、ビット否定演算子は右側の単一のオペランドに適用されます。ビット否定演算子は各ビットをその逆に変換します。つまり、0 は 1 に、1 は 0 になります。例えば、次のようになります。

0    1      operand1
———-
1    0      ~ operand1

int a = 103;    // binary:  00000000000000000000000001100111
int b = ~a;     // binary:  11111111111111111111111110011000 = -104

ヒント

この演算の結果が -104 のような負の数であることに驚かれるかもしれません。これは、int 変数の最上位ビットがいわゆる符号ビットであるためです。最上位ビットが 1 の場合、その数は負の数として解釈されます。正の数と負の数をこのように符号化することを 2 の補数と呼びます。詳しくは、Wikipedia の 2 の補数 に関する記事をご覧ください。

余談ですが、任意の整数 x について、~x は -x-1 と同じであることに注目してください。

場合によっては、符号付き整数式の符号ビットが予期しない結果を引き起こすことがあります。

参照

  • [Example] BitMath Tutorial

Language Reference Home

86Duinoリファレンスのテキストは、Arduinoリファレンスを改変したもので、Creative Commons Attribution-ShareAlike 3.0ライセンスに基づいてライセンスされています。リファレンス内のコードサンプルはパブリックドメインとして公開されています。

上部へスクロール