ビット否定 (~)

Baseline Widely available

This feature is well established and works across many devices and browser versions. It’s been available across browsers since July 2015.

ビット否定演算子 (~) は、オペランドの各ビットを反転します。他のビット演算子と同様、オペランドを 32 ビット符号付き整数に変換します。

試してみましょう

const a = 5; // 00000000000000000000000000000101
const b = -3; // 11111111111111111111111111111101

console.log(~a); // 11111111111111111111111111111010
// Expected output: -6

console.log(~b); // 00000000000000000000000000000010
// Expected output: 2

構文

js
~a;

解説

オペランドは 32 ビットの整数値に変換され、ビット (ゼロまたは 1) の並びによって表現されます。32 ビットを超える数値は最上位のビットが破棄されます。例えば、次の 32 ビットを超える整数は 32 ビット整数に変換されます。

変換前: 11100110111110100000000000000110000000000001
変換後:             10100000000000000110000000000001

オペランドの各ビットが反転されて結果になります。

NOT 演算の真理値表は次のようになります。

a NOT a
0 1
1 0
js
 9 (10 進数) = 00000000000000000000000000001001 (2 進数)
               --------------------------------
~9 (10 進数) = 11111111111111111111111111110110 (2 進数) = -10 (10 進数)

32 ビット符号付き整数のオペランドは、2 の補数によって反転されます。すなわち、最上位ビットが負の数であることを表します。

ある数 x のビット否定 は -(x + 1) になります。例えば、~-54 になります。

数値に 32 ビット表現を使用するため ~-1 および ~4294967295 (2^32 - 1) はいずれも 0 になることに注意してください。

ビット否定の使用

js
~0; // -1
~-1; // 0
~1; // -2

仕様書

Specification
ECMAScript® 2025 Language Specification
# sec-bitwise-not-operator

ブラウザーの互換性

Report problems with this compatibility data on GitHub
desktopmobileserver
Chrome
Edge
Firefox
Opera
Safari
Chrome Android
Firefox for Android
Opera Android
Safari on iOS
Samsung Internet
WebView Android
WebView on iOS
Deno
Node.js
Bitwise NOT (~a)

Legend

Tip: you can click/tap on a cell for more information.

Full support
Full support

関連情報