几种逻辑运算符的运算规则及使用

  • &
    按位与
    如果两个相应的二进制位都为1,则该位的结果值为1,否则为0
    常用用法: 判断奇偶性:用if ((a & 1) == 0) 代替 if (a % 2 == 0)来判断a是不是偶数。

  • |
    按位或
    两个相应的二进制位中只要有一个为1,该位的结果值为1
    常用用法:取整: 12.34 | 0 === 12; -10.213 | 0 === -10

  • ^
    按位异或
    若参加运算的两个二进制位值相同则为0,否则为1
    作用:两个变量互换值,var a = 2, b=5;
    执行:a ^= b; b ^= a; a ^= b;

  • ~
    取反运算符
    计算方法:
    正数按位取反总结
    (1) 十进制转为二进制原码
    (2) 二进制原码按位取反
    (3) 符号位保留,其余位取反+1
    (4) 二进制原码转为十进制
    负数按位取反总结
    (1) 十进制转为二进制原码
    (2) 符号位保留,其余位取反+1
    (3) 二进制原码按位取反
    (4) 二进制原码转为十进制
    等价于 ~x === -x-1 或者 -(x+1)
    作用:
    1、配合 indexOf() 判断数组或者字符串中是否存在某个元素
    因为 不存在返回-1,~-1 = 0 ,大于-1的值,0,1,2,3 … 按位非的值-1,-2,-3,-4
    if判断只要是非 0 都为 真
    2、向下取整 比Math.floor(), parseInt() 等效率高
    ~~5.5 === 5; ~~-5.5 === -5

  • <<
    左移
    用来将一个数的各二进制位全部左移N位,右补0

    作用:左移常被用来做 * (2 ^ n)的运算,因为直接基于二进制运算,所以左移效率比 * (2 ^ n)高,
    x * (2 ^ n) ==> x << n
    例如:10 * (2 * 2* 2) === 10 << 3

  • >>
    右移
    将一个数的各二进制位右移N位,移到右端的低位被舍弃,对于无符号数, 高位补0

    作用:右移常被用来做 / (2 ^ n)的运算,效率更高
    例如:~~(12 / (2*2*2)) === ~~(12 >> 3)

  • >>>
    无符号右移
    运算符规则是:各二进位全部右移若干位,高位补0,低位丢弃。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值