zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    1.4(java学习笔记) 面向对象内存分析
    1.3(java学习笔记)构造方法及重载
    1.2(java学习笔记)类与对象
    1.1(java学习笔记) 面向过程与面向对象
    STM32F0库函数初始化系列:GPIO配置
    STM32F4库函数初始化系列:PWM输出
    STM32F4库函数初始化系列:DMA串口接收
    STM32F4库函数初始化系列:三重ADC——DMA
    STM32F1库函数初始化系列:DMA—ADC采集
    STM32F4库函数初始化系列:串口DMA接收
  • 原文地址:https://www.cnblogs.com/qiang-ling/p/9365766.html
Copyright © 2011-2022 走看看