按位非(~)

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 位有符号整型,并以一系列比特(0 和 1)表示。超过 32 位的数字将丢弃其最高有效位。如下例子中,超过 32 位的整数将转换为 32 位整数:

Before: 11100110111110100000000000000110000000000001
After:              10100000000000000110000000000001

运算结果的每一位数都由操作数相应位反转而来。

NOT 运算的真值表如下所示:

a NOT a
0 1
1 0
 9 (base 10) = 00000000000000000000000000001001 (base 2)
               --------------------------------
~9 (base 10) = 11111111111111111111111111110110 (base 2) = -10 (base 10)

32 位有符号整数操作数根据补码运算规则进行反转,也就是说,最高有效位表示负数。

按位非运算时,任何数字 x 的运算结果都是 -(x + 1)。例如,~-5 运算结果为 4

请注意,由于数字 ~-1~4294967295(232 - 1)均使用 32 位表示形式,它们的运算结果均为 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

参见