“~”的官方解释为:
对每一个比特位执行非(NOT)操作。NOT a 结果为 a 的反转(即反码)。
这里简单解释一下:
假设有一个 int 类型的数,值为5,那么,我们知道它在计算机中表示为: (因为java中int 是4个字节,所以高位需要补0,占够32位)
00000000 00000000 00000000 00000101
在计算机中,负数以原码的补码形式表达
10000000 00000000 00000000 00000101 是 -5的 原码
①正数的反码和补码都与原码相同。
②而负数的反码为对该数的原码除符号位外各位取反。
③负数的补码为对该数的原码除符号位外各位取反,然后在最后一位加1
与indexOf一起使用,用于判断条件
var str = 'rawr';
var searchFor = 'a';
// 这是 if (-1*str.indexOf('a') <= 0) 条件判断的另一种方法
if (~str.indexOf(searchFor)) {
// searchFor 包含在字符串中
} else {
// searchFor 不包含在字符串中
}
// (~str.indexOf(searchFor))的返回值
// r == -1
// a == -2
// w == -3
参考文章:
https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Operators/Bitwise_Operators#Bitwise_NOT
https://www.cnblogs.com/Java-Script/p/11095276.html