zoukankan      html  css  js  c++  java
  • javascript操作符(~、&、|、^、>>、<<)

    1、操作符非(~)

      var num = 7;

      var num2 = ~num;

      alert(num2);    // -8

      var num3 = -1;

      var num4 = ~num3;

      alert(num4);    // 0

      可以看出:~ 就是将原来的数值加1后取负,  即: ~x = -(x + 1)。

      底层原理: 

        先了解一下基本知识

        1、计算机里的数字是以补码的形式表示的。

        2、取反即:0变1,1变0。

        3、第一个数为符号位,0为正数,1为负数。

        4、正数的原码、反码、补码都一样。

        5、负数的反码:符号位不变,其余取反。补码:反码加1。

        6、0的反码补码都为0。

      

        ~即对当前数取反所表示的值。计算机中数字以补码形式表示,7的取反正好是-8的补码,所以~7 == -8;

       用途:

        1)、取整数随机数

          ~~(Math.random()*7);    // 在0~6内取整数随机数,包括0和6

          ~(Math.random()*7);      // 在-7~-1内取整数随机数,包括-7和-1

          -~(Math.random()*7);      // 在1~7内取整数随机数,包括1和7

        2)、解决抽象渗漏

          抽象渗漏:在代码中暴露底层实现的细节。

          对于indexOf判断是否存在,像>-1、!=-1、>=0、<0之类细节就应该屏蔽掉

          那么用~就很好解决了

            var str = 'hello World';
          if(~str.indexOf('ell'))
            return true;
          else
            return false;
    
    

    2、按位与&

        var num1 = 25 & 7;

        var num2 = 25 & -7;

        var num3 = -25 & 7;

        var num4 = -25 & -7;

        alert(num1);    // 1

        alert(num2);    // 25

        alert(num3);    // 7

        alert(num4);    // -31

        原理:1&1=1、1&0=0、0&1=0、0&0=0。

        根据规则对补码处理:

        25 & 7

        

        25 & -7

        

        -25 & 7

        

        -25 & -7

        

        红 & 红 == 绿    绿 == 最后一行的数的补码

    3、按位或 | 

        原理:1|1=1、1|0=1、0|1=1、0|0=0。

        例子: 参考上面的。

    4、按位异 ^

        原理:1^1=0、1^0=1、0^1=1、0^0=0。

        例子: 参考上面的。

    5、左移 <<   、右移 >>  、无符号右移 >>>

        

        简单记法:(a << b) === Math.ceil(a*(2**b));

             (a >> b) === Math.floor(a/(2**b));

        

     

        

  • 相关阅读:
    day02 Python 字符串编码
    地坛——我的最爱 (2006-11-12 09:33:18)
    心灵噬血虫 (2007-01-02 12:33:36)
    ArcSDE for oracle10g安装后post的时候出现错误
    创建featureclass,为它赋别名,并移动到数据集下
    feature.shape和feature.shapecopy的区别
    IPoint从自定义的投影坐标系转换到自定义的地理坐标系
    女儿傻 女儿悲 2014-2-23
    自嘲 2014-2-7
    写在双节 2014-2-14
  • 原文地址:https://www.cnblogs.com/seeks/p/7710977.html
Copyright © 2011-2022 走看看