js中的按位取反运算符~

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

js中的按位取反运算符~
⼀、运算符~
JS按位取反运算符~,是对⼀个表达式执⾏位⾮(求⾮)运算。

如~1 = -2,~-3=2,~true=-2,~false=-1
⼆、如何按位取反计算
按位取反的运算规则步骤:
1、⼗进制转成原码
转成⼆进制原码,最⾼位是符号位,0为正数,1为负数
⼗进制---->原码
1 ----> 00000001
-1 ----> 10000001
2、原码转成反码
正数的反码就是原码,负数的反码是符号位不变,其余位取反
⼗进制---->原码---->反码
1 ----> 00000001 ----> 00000001
-1 ----> 10000001 ----> 11111110
3、反码转成补码
正数的补码还是原码,负数的补码是在反码的基础上加1
⼗进制---->原码---->反码---->补码
1 ----> 00000001 ----> 00000001 ----> 00000001
-1 ----> 10000001 ----> 11111110 ----> 11111111
4、补码取反得原码
正整数补码取反之后符号位置为1,是⼀个负整数,所以再按照负整数计算补码的⽅式逆运算得到原码
逆运算得到原码,⾸先将取反的补码转成反码,公式:反码=补码 - 1,然后将反码转成原码,符号位不变,其他位取反
⼗进制---->原码---->反码---->补码---->补码取反---->取反补码转成反码 ---->转成原码
1 ----> 00000001 ----> 0000001 ----> 00000001 ----> 11111110 ----> 11111101 ----> 10000010
负整数补码取反之后符号位置为0,是⼀个正整数,因正整数的反码与补码就是本⾝,所以不需要再进⾏逆运算
⼗进制----> 原码---->反码---->补码---->补码取反得原码
-1 ----> 10000001 ----> 11111110 ----> 11111111 ----> 00000000
5、将原码转成⼆进制
⼗进制---->原码---->反码---->补码 ---->补码取反 ---->取反补码转成反码 ---->转成原码 ---->转成⼆进制
1 ----> 00000001 ----> 0000001 ----> 00000001 ----> 11111110 ----> 11111101 ----> 10000010 ----> -2
⼗进制---->原码---->反码---->补码 ----> 补码取反得原码 ---->转成⼆进制
-1 ----> 10000001 ----> 11111110 ----> 11111111 ----> 00000000 ----> 0
所以,~1=-2,~-1=0
三、使⽤ ~ 和!的区别
findIndex是查询是否在数组中,存在则返回索引,不存在返回-1,通过~取反,得到的效果与使⽤!相同,但是两者返回的值不同。

~ 返回的是⼀个整数类型
!返回的是⼀个boolean类型
let arr = [1,2,3,4,5];
console.log(~arr.findIndex(d=>d===1)?'1存在':'1不存在'); //1存在
console.log(~arr.findIndex(d=>d===6)?'6存在':'6不存在');//6不存在
console.log(~arr.findIndex(d=>d===6)) //0
console.log(!arr.findIndex(d=>d===6)) //false
四、取反再取反~~的作⽤
操作符~,是按位取反的意思,表⾯上~~(取反再取反)没有意义,实际上在JS中可以将浮点数变成整数。

console.log(~~1.11); //1
console.log(~~-25.11); //-25。

相关文档
最新文档