在 JavaScript 的世界里,位运算符就像是一群隐藏在幕后的神秘魔法师,它们不常被提及,但在某些特定的场景下却能发挥出巨大的威力。今天,我们就来揭开位运算符的神秘面纱,了解按位与、或、非等操作的奇妙之处。
位运算符是对二进制位进行操作的运算符。在 JavaScript 中,所有的数字都是以 64 位浮点数存储的,但在进行位运算时,会先将数字转换为 32 位整数,然后再进行操作,最后再转换回 64 位浮点数。
按位与运算符 &
会对两个数的每一位进行比较,如果两个对应位都为 1,则该位的结果为 1,否则为 0。
let a = 5; // 二进制表示为 0101
let b = 3; // 二进制表示为 0011
let result = a & b; // 二进制结果为 0001,十进制为 1
console.log(result);
在这个例子中,5 和 3 进行按位与操作,只有最后一位都是 1,所以结果是 1。按位与操作常用于判断一个数的奇偶性,因为奇数的二进制表示最后一位是 1,偶数是 0,所以一个数和 1 进行按位与操作,如果结果是 1 则为奇数,是 0 则为偶数。
function isOdd(num) {
return (num & 1) === 1;
}
console.log(isOdd(5));
console.log(isOdd(6));
按位或运算符 |
会对两个数的每一位进行比较,如果两个对应位中有一个为 1,则该位的结果为 1,只有当两个对应位都为 0 时,结果才为 0。
let c = 5; // 二进制表示为 0101
let d = 3; // 二进制表示为 0011
let resultOr = c | d; // 二进制结果为 0111,十进制为 7
console.log(resultOr);
在这个例子中,5 和 3 进行按位或操作,只要有一位是 1,结果对应的位就是 1,所以最终结果是 7。
按位非运算符 ~
会对一个数的每一位取反,即 0 变为 1,1 变为 0。
let e = 5; // 二进制表示为 0101
let resultNot = ~e; // 二进制结果为 1010(补码形式),十进制为 -6
console.log(resultNot);
按位非操作的结果是原数加 1 后取负,这是因为计算机中负数是以补码形式存储的。
运算符 | 名称 | 描述 | 示例 | ||
---|---|---|---|---|---|
& | 按位与 | 对应位都为 1 结果为 1,否则为 0 | 5 & 3 = 1 |
||
\ | 按位或 | 对应位有一个为 1 结果为 1,都为 0 结果为 0 | `5 | 3 = 7` | |
~ | 按位非 | 每一位取反 | ~5 = -6 |
位运算符虽然在日常开发中使用频率不高,但在处理一些底层操作、优化性能等方面有着独特的优势。掌握这些位运算符,就像是掌握了一把神奇的钥匙,能让你在 JavaScript 的世界里解锁更多的可能性。希望通过今天的介绍,你能对这些神秘的位运算符有更深入的了解。