📜  ~~(“双波浪号”)在 Javascript 中的作用是什么? - Javascript(1)

📅  最后修改于: 2023-12-03 14:48:44.037000             🧑  作者: Mango

双波浪号在 JavaScript 中的作用

在 JavaScript 中,双波浪号“~~”是一种位运算符,用于执行按位求反操作并返回取反后的整数值。它只能应用于整数,将其二进制表示的每个位取反,例如:

console.log(~1); // -2
console.log(~(-1)); // 0

在上述示例中,第一个 console.log 的结果是“-2”。这是因为 JavaScript 将整数“1”转换为二进制“00000001”,然后将每个位都取反,得到“11111110”,这个二进制数字仍然是一个带符号的整数,并由于其最高位为“1”,因此被解释为负数“-2”。

第二个 console.log 的结果是“0”,这是因为 JavaScript 将整数“-1”转换为二进制“11111111”,然后将每个位都取反,得到“00000000”,这个二进制数字仍然是一个带符号的整数,并由于其最高位为“0”,因此被解释为非负数“0”。

需要注意的是,双波浪号运算符在 JavaScript 中执行过程中会将其操作数强制转换为32位有符号整数。这意味着,在执行该运算符时,操作数将被剪裁为32位,无论其原始值是什么。例如:

console.log(~~4294967296); // 0

在上述示例中,虽然原始值“4294967296”是一个超过32位的整数,并且是一个非负数。但是由于双波浪号运算符的特殊性质,该运算符在执行过程中将其转换为32位整数,并将其剪裁为“0”。

总之,双波浪号运算符可以用于对整数执行位操作,但是需要注意其特殊的执行方式。在实际场景中,建议使用更加清晰明确的代码来执行位运算,以避免出现意外结果。