• js中的位运算符 ,按位操作符


     按位操作符(Bitwise operators) 将其操作数(operands)当作32位的比特序列(由0和1组成),而不是十进制、十六进制或八进制数值。例如,十进制数9,用二进制表示则为1001。按位操作符操作数字的二进制形式,但是返回值依然是标准的JavaScript数值。

    位运算符名称js内使用方式 操作作用应用举例
     & 按位与  a & b 对每对比特位执行与(AND)操作。只有两者互相对应的比特位都是 1 时,a & b的对应比特位才是 1   a&1 判断一个整数的奇偶
    | 按位或 a | b 对每一对比特位执行或(OR)操作。如果两者互相对应的比特位中都至少有一个是 1,则a | b的对应比特位是 1。

     a|1 把这个数强行变成最接近的偶数;

    将任一数值 x 与 0 进行按位或操作,其结果都是 x;

    将任一数值 x 与 -1 进行按位或操作,其结果都为 -1

    ^ 按位异或 a ^ b 对每一对比特位执行异或(XOR)操作。如果两者互相对应的比特位都不同,则a ^ b的对应比特位是 1。 两次异或同一个数最后结果不变 (a ^ b) ^ b = a
    ~ 按位取反 ~a

    对每一个比特位执行非(NOT)操作。NOT a  结果为 a 的反转(即反码);

    即把0和1全部取反 

    if (~str.indexOf(searchFor))

    {
    // searchFor 包含在字符串中
    }

    else

    {
    // searchFor 不包含在字符串中
    }

     
    << 左移 a << b
    将 a 的二进制形式向左移 b (< 32) 比特位,右边用0填充。
     
    >>  带符号右移  a >> b 将 a 的二进制表示向右移 b (< 32) 位,丢弃被移出的位。  相当于a除以2的b次方(取整) 
    >>>  无符号右移  a>>> b  将 a 的二进制表示向右移 b (< 32) 位,丢弃被移出的位,并使用 0 在左侧填充。  

     

    自动化掩码创建

    function createMask () {
        var nMask = 0, nFlag = 0, nLen = arguments.length > 32 ? 32 : arguments.length;
        for (nFlag; nFlag < nLen; nMask |= arguments[nFlag] << nFlag++);
        return nMask;
    }
    var mask1 = createMask(true, true, false, true); // 11, i.e.: 1011
    var mask2 = createMask(false, false, true); // 4, i.e.: 0100
    var mask3 = createMask(true); // 1, i.e.: 0001
    // etc.

    alert(mask1); // 打印 11

    逆算法:从掩码得到布尔数组

    function arrayFromMask (nMask) {
        // nMask 必须介于 -2147483648 和 2147483647 之间
        if (nMask > 0x7fffffff || nMask < -0x80000000) {
            throw new TypeError("arrayFromMask - out of range");
        }
        for (var nShifted = nMask, aFromMask = []; nShifted;
        aFromMask.push(Boolean(nShifted & 1)), nShifted >>>= 1);
        return aFromMask;
    }

    var array1 = arrayFromMask(11);
    var array2 = arrayFromMask(4);
    var array3 = arrayFromMask(1);

    alert("[" + array1.join(", ") + "]");
    // 打印 "[true, true, false, true]", i.e.: 11, i.e.: 1011

    参考:https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Operators/Bitwise_Operators

  • 相关阅读:
    Study Plan The TwentySecond Day
    Study Plan The Nineteenth Day
    Study Plan The TwentySeventh Day
    Study Plan The Twentieth Day
    Study Plan The TwentyFirst Day
    python实现进程的三种方式及其区别
    yum makecache
    JSONPath 表达式的使用
    oracle执行cmd的实现方法
    php daodb插入、更新与删除数据
  • 原文地址:https://www.cnblogs.com/qiang-ling/p/9365766.html
Copyright © 2020-2023  润新知