JavaScript/~
~
は、ECMAScript におけるビット単位の否定演算子(Bitwise NOT Operator)です。この演算子は、オペランドのビットを反転させます。具体的には、オペランドの各ビットを 0
から 1
に、または 1
から 0
に反転させ、その結果を返します[1]。
構文
~ expression
expression
: ビット単位で反転される式。
この演算子は、以下のように使用されます:
let result = ~expression;
動作
ビット単位の否定演算子 (~
) は、以下の手順で動作します:
- 式の評価:
expression
を評価します。 - 数値への変換: 評価結果を 32 ビット整数に変換します。
- ビットの反転: 32 ビット整数の各ビットを反転させます。
- 結果の返却: 反転されたビットパターンを符号付き 32 ビット整数として返します。
例
基本的な使用法
以下のプログラムは、ビット単位の否定演算子の基本的な使用法を示しています。
// 基本的な使用法 let a = 5; // 5 のバイナリ表現は 00000000000000000000000000000101 let result = ~a; // ビット反転後は 11111111111111111111111111111010 console.log(result); // -6
このプログラムでは、5
のビットを反転させると -6
になります。
負の数での使用
以下のプログラムは、負の数に対してビット単位の否定演算子を使用する例を示しています。
// 負の数での使用 let b = -10; // -10 のバイナリ表現は 11111111111111111111111111110110 let result = ~b; // ビット反転後は 00000000000000000000000000001001 console.log(result); // 9
このプログラムでは、-10
のビットを反転させると 9
になります。
ビット演算との組み合わせ
以下のプログラムは、ビット単位の否定演算子を他のビット演算子と組み合わせて使用する例を示しています。
// ビット演算との組み合わせ let x = 12; // 12 のバイナリ表現は 00000000000000000000000000001100 let y = 7; // 7 のバイナリ表現は 00000000000000000000000000000111 let result = ~x & y; // ~x は 11111111111111111111111111110011、& y は 00000000000000000000000000000011 console.log(result); // 3
このプログラムでは、~x
の結果と y
のビット単位の AND 演算を行い、結果として 3
が得られます。
注意点
- 32 ビット整数への変換: ビット単位の否定演算子は、オペランドを 32 ビット整数に変換します。64 ビットの浮動小数点数や大きな整数は、32 ビットに切り捨てられます。
- 符号付き整数: 結果は符号付き 32 ビット整数として返されます。そのため、ビット反転の結果は負の数になることがあります。
- 非数値のオペランド: オペランドが数値でない場合、JavaScript は自動的に数値に変換しようとします。例えば、文字列
"5"
は数値5
に変換されます。
脚註
- ↑ ビット単位の否定演算子は、ビット演算や低レベルの操作に使用されます。