Js的位运算符

1、与运算符&

表达式1 & 表达式2
均转为二进制数据,同1取1,其他取0
如:2 & 2 ,结果是2
实际使用场景:
(1)可判断奇偶

var a = 1
var b = 2
a & 1 === 0 ? console.log('a是偶数') : ('a是奇数')
b & 1 === 0 ? console.log('b是偶数') : ('b是奇数')

(2)判断n是否为2的整数幂

var n = 64
if((n & (n - 1)) === 0) {
   console.log('n是2的整数幂')
}

2、或运算符|

表达式1 | 表达式2
均转为二进制数据,同0取0,其他取1
如:2 | 1 ,结果是3
实际使用场景:
正数:使用 A + 0.5 | 0 来替代 Math.round()
负数:使用 A - 0.5 | 0 来替代 Math.round()

var a1 = 1.32
var a2 = 3
var a3 = 4.8

console.log(Math.floor(a1) === (a1 + 0.5 | 0)) // true
console.log(a1 + 0.5 | 0) // 1
console.log(a2 + 0.5 | 0) // 3
console.log(a3 + 0.5 | 0) // 5

3、非运算符~

~表达式
转为二进制数据,0取1,1取0
如: ~2 ,结果是-3
计算公式(取反,减1):~a = -a - 1
实际使用场景:待挖掘

4、异或运算符^

表达式1 ^ 表达式2
均转为二进制数据,不同为1,同为0
如:2 ^ 1,结果为3
实际使用场景:
(1)交换变量(个人感觉,不实用,建议使用es6的结构方法,更简单)

var a = 1
var b = 2
a = a ^ b
b = a ^ b
a = a ^ b
console.log(a, b)

// es6结构方法,交换变量
var aa = 1
var bb = 2
[aa, bb] = [bb, aa]

(2)切换变量0、1

var toggle = 0

// if判断
if (toggle) {
  toggle = 0
} else {
  toggle = 1
}

// 三元运算符
toggle = toggle ? 0 : 1

// 异或运算符
toggle ^= 1

(3)检查数字是否相等

var a = 2
var b = 3
// if判断
if (a !== b) {
  console.log('a、b不相等')
}
// 异或运算符
if (a ^ b) {
  console.log('a、b不相等')
}

5、左位移<<

表达式 << 位数
转为二进制数据,向左移动n位
计算公式:a << n = a * (2 ^ n)
实际使用场景:待挖掘

6、右位移>>

表达式 >> 位数
转为二进制数据,向右移动n位
计算公式:a >> n = a / (2 ^ n)
实际使用场景:待挖掘

7、全右位移>>>

表达式 >>> 位数
转为二进制数据,向右移动n位,符号位也会跟着移动
实际使用场景:进制转换,如 十进制和二进制之间的转换

// 十进制转为二进制
function tenToTwo(value) {
  return (value >>> 0).toString(2)
}

// 二进制转为十进制
function twoToTen(value) {
  return parseInt(value, 2).toString(10)
}

console.log(tenToTwo(8)) // '1000'
console.log(twoToTen(1101))  // '13'

8、其他

(1)使用Array来重复字符

var str = Array(10).join('2') // '2222222222'

// es6的写法
var str1 = '2'.repeat(10)

(2)写void 0会比undefined快

var a = void 0
console.log(a) // undefined

(3)写Array.length = 0 可清空数组
(4)写Array.slice(0)可浅拷贝数组

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值