资讯专栏INFORMATION COLUMN

常用的JavaScript位操作(Bitwise)

MoAir / 2958人阅读

摘要:虽然需要转换,但这个过程与其他数学运算和布尔操作相比要快很多。位掩码位掩码用于处理同时存在多个布尔选项的情形。使用单个数字的每一位来判定选项是否成立,从而有效地把数字转换为由布尔值标记组成的数组。

位操作

JavaScript中的数字都按照IEEE-754(Institute of Electrical and Electronics Engineers)标准以64位格式存储。在位操作中,数字被转换为有符号32位格式。每次运算符会直接操作该32位数以得到结果。虽然需要转换,但这个过程与JavaScript其他数学运算和布尔操作相比要快很多。

Bitwise AND 按位与

两个操作数的对应位都是1时,则在该位置返回1。

Bitwise OR 按位或

两个操作数的对应位只要一个为1时,则在该位返回1。

Bitwise XOR 按位异或

两个操作数的对应位只有一个为1,则在该位返回1。

Bitwise NOT 按位取反

遇0则返回1,反之亦然。

颜色交替

32位数字的二进制底层表示,偶数的最低位是0,奇数的最低位是1。如果此数为偶数,和1按位与的结果是0;如果此数为奇数,和1按位与的结果是1。可以使用该方法实现颜色交替,效率可能会比纯数学运算(如,取模)快50%。

    for (let i = Things.length - 1; i >= 0; i--) {
        if(i & 1) {
            className = "oddColor";
        }else {
            className = "evenColor";
        }
    }
位掩码

位掩码用于处理同时存在多个布尔选项的情形。使用单个数字的每一位来判定选项是否成立,从而有效地把数字转换为由布尔值标记组成的数组。掩码中的每个选项的值都等于2的幂

const OPTION_A = 1;
const OPTION_B = 2;
const OPTION_C = 4;

const options  = OPTION_A | OPTION_B;

// 选项A是否在options中
if(options & OPTION_A) {
    // code here
}
// 选项A是否在options中
if(options & OPTION_B) {
    // code here
}
// 选项A是否在options中
if(options & OPTION_C) {
    // code here
}

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/107991.html

相关文章

  • JavaScript 转换数字为整数方法

    摘要:另外自己写代码测试了下和的速度,比较结果如下位操作转换整数的原理参考上面对于位操作的说明,点击下面链接有这样一段话中,数字存储是双进度位浮点数。但是位操作却会把要操作的运算元当做位带符号的整数。因此进行位操作时,会自动把数字先转换为整数。 本文将会列举并说明JavaScript 把一个number(或者numerical的对象)转换成一个整数相关方法。 使用parseInt parse...

    YanceyOfficial 评论0 收藏0
  • 复习js 2

    摘要:复习表达式和运算符运算符拥有如下类型的运算符。例如十进制数字用二进制表示为,位运算符就是在这个二进制表示上执行运算,但是返回结果是标准的数值。因此,用于布尔值时,当任何一个操作数为则返回如果操作数都是则返回。 复习js day2 表达式和运算符 运算符 JavaScript 拥有如下类型的运算符。本节描述了运算符和运算符的优先级。 赋值运算符(Assignment operators...

    yhaolpz 评论0 收藏0
  • 由left-pad扯到JS中运算

    摘要:原码补码和反码原码一个数在计算机中是以二进制的形式存在的,其中第一位存放符号正数为负数为。中的位运算在中按位操作符会将其操作数转成补码形式的有符号位整数。原文链接由扯到中的位运算 这个话题的由来是2016年3月份的时候 NPM 社区发生了‘left-pad’事件,不久后社区就有人发布了用来补救的,也是现在大家能用到的 left-pad 库。 最开始这个库的代码是这样的。 module....

    LeoHsiun 评论0 收藏0
  • websocket 二进制数据传输基础准备工作

    摘要:例如,十进制数,用二进制表示则为。按位操作符操作数字的二进制形式,但是返回值依然是标准的数值。不同为真相同为假二进制按位异或运算从左到右按位非为真,为假对每一项进行非操作,遇真则假,遇假则真。 二进制与十六进制 二进制用 0 1 表示 2= 10十六进制 前缀0x 用0123456789ABCDEF表示 2= 0x2二进制与十六进制的转换十六进制的每位 等于二进制的四位 十六进制 0x...

    LeviDing 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<