按位非、右移

~ 按位非

~操作符会将操作数的每一位取反,如果是1则变为0,如果是0则边为1
简单记忆:~x = -(x+1)

原理分析

例: ~-1 = 0
说明:
在计算机中,负数以其正值的补码形式表示。反码加1称为补码。也就是说,要得到一个数的补码,先得到反码,然后反码加上1,所得数称为补码。
所以-1的补码表示为:1 111 1111 (用8位表示)
补码转换过程如下:
原码:0 000 0001 (+1)
反码:1 111 1110
补码:1 111 1111 (-1的补码表示)
取反:0 000 0000

例:~1 = -2
原码: 0 000 0001 (正数的原码、反码、补码相同)
取反: 1 111 1110 (得到的这个数值就是-2的补码表示)

验证-2的补码表示
原码: 0 000 0010
反码: 1 111 1101
补码: 1 111 1110

理解这个操作符的意义,并不在于indexOf,而是计算机基础的掌握

右移

‘>>’(符号传播右移)算术右移
该操作符将第一个操作数向右移动指定的位数。符号位被拷贝从左边移入。
由于新的最左边的位与之前的符号位具有相同的值,因此符号位不会改变。
因此,名称“签名传播”。

‘>>>’(零填充右移) 无符号右移
该操作符将第一个操作数向右移动指定的位数。向右移位的过多位被丢弃。0从左侧移入。
符号位变为0,所以结果总是非负的。