按位取反运算符 ~
概念
按位取反是指将一个二进制数的每一位都取反,即 0 变为 1,1 变为 0。在很多编程语言中,可以通过使用位运算符~
来实现按位取反操作。
运算规则
- 将要取反的二进制数转换为二进制补码表示法。
- 对二进制补码表示法的每一位进行取反操作。
- 将取反后的二进制数转换回十进制表示法。
示例
对二进制数 10110101 按位取反,可以按照以下步骤进行操作:
- 将 10110101 转换为二进制补码表示法,因为它是一个有符号数,所以它的最高位为 1,表示负数。其补码为 01001011。
- 对补码的每一位进行取反操作,得到 10110100。
- 将取反后的二进制数转换回十进制表示法,得到 148。
因此,按位取反操作后,二进制数 10110101 变为了十进制数 148。
应用 indexOf
由于 -1 的取反操作等于 0,而其他数的取反操作不等于 0。所以用
indexOf
操作符可以用~
操作来判断某个数组或字符串里是否有某个字符。
取反之后不为零,说明 indexOf 的结果不等于-1,数组或字符串里包含对应字符
取反之后为零,说明 indexOf 的结果等于-1,数组或字符串里不包含对应字符
1 | console.log(~-1); // 0 |
数组
1 | let arr = [0, 1, 2, 3, 4, 5, 6]; |
字符串
1 | let str = "123456"; |