JavaScript中~和~~操作符
1. ~操作符
~ 是JavaScript中的操作符,按二进制位取反。
其实这涉及到原码、反码、补码的知识。
原码:
原码表示法的最高位为符号位,该位为0表示正数,1表示负数。其余位表示数的绝对值。
[+1]原 = 0000 0001
[-1]原 = 1000 0001
反码:
对于一个带符号的数来说,正数的反码与其原码相同;负数的反码为其原码除符号位以外的各位按位取反。反码常用来做求补码过程中的中间形式。
[+1] = [00000001]原 = [00000001]反
[-1] = [10000001]原 = [11111110]反
补码:
正数的补码与其原码和反码相同;负数的补码是对它的原码除符号位以外各位取反,并在末位加1而得到,即为该数的补码加1。
[+1] = [00000001]原 = [00000001]反 = [00000001]补
[-1] = [10000001]原 = [11111110]反 = [11111111]补
因此:
~是按位取反的意思,取反就是如果是00111,则变为11000 (按位取反)
57的二进制表示为(1个字节):[00111001]
- 按位取反后(
~57)的二进制:[11000110]此表示为十进制:-70 - 这是一个负数,是有符号的数,负数在计算机里要用其补码来表示:补码=符号位以后按位取反再加1.
- 所以-70(
[11000110])符号位以后按位取反后为([10111001]) 再加1 则为([10111010]) - 换成十进制为:-58
因此~57=-58
2. ~~操作符
~~ 经常用来进行取整和类型转换。
它和使用Number进行类型转换还是有区别的,比如处理 undefined 的时候。

注意:使用~~取整时,不考虑小数四舍五入。
~~6.3 === 6 //true
~~6.8 === 6 //true

浙公网安备 33010602011771号