一、位运算概念
位运算主要分为两大类:逻辑位运算 和位移位运算
二、 逻辑位运算符
$ 按位与
- 两个相应的二进制位中只要有一个为1,该位的结果值为1,两者都为0才为0
let m = 5, n = 3
let k = m & n
console.log(k)
| 按位或
- 两个相应的二进制位中只要有一个为0,该位值结果为0,否则为1,两者都为1才为1
let m = 5, n = 3
let k = m | n
console.log(k)
^ 按位异或
let m = 5, n = 3
let k = m ^ n
console.log(k)
~ 按位取反
~ 是一元运算符,用来对一个二进制数按位取反,即将0变1,1变0
let bitwiseNot = () => {
let m = 5, n = -3
let j = ~ m
let k = ~ n
console.log(j,k)
}
按位取反特殊例子:
~0;
~-1;
~1;
三、位移位运算符
>> 右移运算符
- 将一个数的二进制右移N位,移到右端的低位被舍弃,高位原来是什么就补什么
const a = 5;
const b = 2;
const c = -5;
console.log(a >> b);
console.log(c >> b);
<< 左移运算符
const a = 5;
const b = 2;
console.log(a << b);
>>> 无符号位移运算符
- 将一个数的二进制右移N位,移到右端的低位被舍弃,对无符号数,
高位补0
const a = 5;
const b = 2;
const c = -5;
console.log(a >>> b);
console.log(c >>> b);
四、例题
136. 只出现一次的数字
来源:力扣
题目描述
题解
var singleNumber = function(nums) {
let single = 0;
for(let i=0;i<nums.length;i++){
console.log(single,nums[i])
single ^= nums[i]
}
return single
};
190. 颠倒二进制位
来源:力扣
题目描述
题解
var reverseBits = function (n) {
let res = 0;
for (let i = 0; i < 32; i++) {
res = (res << 1) + (n & 1);
n = n >>> 1;
}
return res >>> 0;
};
|