• 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

      

  • 相关阅读:
    4种方法教你如何截取JS字符串最后一位
    12种JS常用获取时间的方式
    拖动的模态框
    计算鼠标在盒子内的坐标
    offset与style的区别
    offset系列属性
    Words
    #一些真相# 和自己握手言和,不要期盼另一片荒岛可以让你变成陆地
    Stack为什么翻译成栈?- 根据字形来辨别容易混淆的堆和栈
    [Hardware] 机械硬盘和固态硬盘功耗对比
  • 原文地址:https://www.cnblogs.com/minorf/p/13225505.html
Copyright © 2020-2023  润新知