按位与(&):
let result = 5 & 3;
// 0101 & 0011 = 0001 (1)
按位或(|):
let result = 5 | 3;
// 0101 | 0011 = 0111 (7)
按位异或(^):
let result = 5 ^ 3;
// 0101 ^ 0011 = 0110 (6)
按位非(~):
let result = ~5;
// ~0101 = 1010 (-6 in decimal)
左移(<<):
let result = 5 << 1;
// 0101 << 1 = 1010 (10)
右移(>>):
let result = 5 >> 1;
// 0101 >> 1 = 0010 (2)
无符号右移(>>>):
let result = -5 >>> 1;
// 1111111111111111111111111111111011 >>> 1 = 0111111111111111111111111111111101 (2147483645)
这些位运算符在特定的情况下很有用,例如优化一些算法或处理特殊的位级数据。然而,它们通常在普通的业务逻辑中用得较少。
function add(a, b) {
while (b !== 0) {
let carry = a & b;
a = a ^ b;
b = carry << 1;
}
return a;
}
// 示例
let sum = add(5, 3);
console.log(sum); // 输出 8
这里使用了位运算中的异或(^)和与(&)操作来模拟加法过程。循环执行,直到进位为0。
function subtract(a, b) {
// 取b的补码并加1
b = add(~b, 1);
return add(a, b);
}
// 示例
let difference = subtract(5, 3);
console.log(difference); // 输出 2
在减法中,我们首先取b的补码(使用取反和加1的方式),然后将它与a相加