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
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步