javascript 中的 ~ 按位非运算符会将操作数转换为 32 位有符号整数,然后对每一位进行取反。要将其转回整数,最直接的方法是使用 math.floor() 或 -x - 1 的逆运算逻辑,但通常我们关注的是它返回的负数值本身(例如 ~5 结果为 -6)。如果目的是还原原始值,可以通过 -val - 1 实现;若需处理布尔上下文中的假值判断,则直接利用其返回值即可。

~ 运算符在数组查找中的具体行为是什么
在 JavaScript 中,~ 常用于将 indexOf 的返回值转换为布尔真值,因为 -1 取反后为 0(假),而其他索引取反后为非零整数(真)。这种用法利用了 ~ 将 -1 映射为 0 的特性,从而简化条件判断代码。

const arr = ['a', 'b', 'c'];
console.log(~arr.indexOf('b')); // 输出: -2
console.log(!!~arr.indexOf('b')); // 输出: true
console.log(~arr.indexOf('d')); // 输出: 0
console.log(!!~arr.indexOf('d')); // 输出: false
如何将 ~ 的结果还原为原始输入值
由于 ~x 等价于 -x - 1,因此可以通过 -y - 1 将结果 y 还原为原始值 x。例如,若 y = ~5 = -6,则 x = -(-6) - 1 = 5。这一数学关系确保了转换的可逆性,适用于需要恢复原始数据的场景。

function invertBitwiseNot(val) {
return -val - 1;
}
console.log(invertBitwiseNot(~5)); // 输出: 5
console.log(invertBitwiseNot(~-1)); // 输出: 0
console.log(invertBitwiseNot(~0)); // 输出: -1
当输入为浮点数时 ~ 如何处理
当输入为浮点数时,~ 会先将其截断为整数部分再进行按位非操作。例如 ~5.9 等同于 ~5,结果为 -6。这种行为源于 JavaScript 内部先将操作数转换为 32 位有符号整数的规则,小数部分被直接丢弃,不影响最终结果。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











