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]

  1. 按位取反后(~57)的二进制: [11000110] 此表示为十进制:-70
  2. 这是一个负数,是有符号的数,负数在计算机里要用其补码来表示:补码=符号位以后按位取反再加1.
  3. 所以-70([11000110])符号位以后按位取反后为([10111001]) 再加1 则为([10111010])
  4. 换成十进制为:-58
    因此~57=-58

2. ~~操作符

~~ 经常用来进行取整类型转换
它和使用Number进行类型转换还是有区别的,比如处理 undefined 的时候。

注意:使用~~取整时,不考虑小数四舍五入。

~~6.3 === 6  //true
~~6.8 === 6  //true
posted @ 2021-09-16 16:29  青柠i  阅读(228)  评论(0编辑  收藏  举报