按位非(~)

按位非运算符(~)将操作数的位反转。如同其他位运算符一样,它将操作数转化为 32 位的有符号整型。

尝试一下

语法

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 Language Specification
# sec-bitwise-not-operator

浏览器兼容性

BCD tables only load in the browser

参见