JavaScript - 位运算符

你好,未来的编程巫师们!今天,我们将要进入JavaScript位运算符的迷人世界。我知道你们现在在想什么:“位运算符是什么?”别担心!在本课结束时,你将能够像专业人士一样操作位。那么,让我们一起踏上这个二进制冒险之旅吧!

JavaScript - Bitwise Operators

JavaScript 位运算符

位运算符是JavaScript中的特殊工具,它们允许我们在二进制级别上处理数字。这意味着我们在处理1和0,就像计算机内部一样。听起来可能有些吓人,但相信我,一旦你掌握了它,其实非常有趣!

在我们具体介绍之前,让我们先来看看我们将要讨论的所有位运算符:

运算符 名称 描述
& AND 如果两个位都是1,则将每个位设置为1
| OR 如果两个位之一是1,则将每个位设置为1
^ XOR 如果只有两个位之一是1,则将每个位设置为1
~ NOT 翻转所有位
<< 左移 向左移动,从右侧填充0
>> 右移 向右移动,从左侧复制最左位的位
>>> 零填充右移 向右移动,从左侧填充0

现在,让我们一个一个地来分解这些!

JavaScript 位运算符 AND (&)

位运算符AND就像一个在高级俱乐部门口非常严格的门卫。只有当两个输入都是1时,它才让1通过。否则,它是0。让我们看看它是如何工作的:

let a = 5;  // 二进制为0101
let b = 3;  // 二进制为0011
console.log(a & b);  // 二进制为0001,十进制为1

在这个例子中,我们在比较5(0101)和3(0011)的每一位。只有在最右边的位在两个数字中都是1,所以只有那一位是1。结果是0001,十进制为1。

JavaScript 位运算符 OR (|)

位运算符OR就像一个宽容得多的保安。如果任何一个输入是1,它就让它通过。让我们看看它是如何工作的:

let a = 5;  // 二进制为0101
let b = 3;  // 二进制为0011
console.log(a | b);  // 二进制为0111,十进制为7

在这里,无论5还是3中的哪一个是1,我们都会得到1,结果是0111,十进制为7。

JavaScript 位运算符 XOR (^)

XOR运算符就像一个奇特的派对游戏,只有当你戴着帽子或者围巾时才能进入,但不能同时戴两者!它只在位不同时返回1。来看看这个:

let a = 5;  // 二进制为0101
let b = 3;  // 二进制为0011
console.log(a ^ b);  // 二进制为0110,十进制为6

我们在位不同的地方得到1(从右边数的第二位和第三位),结果是0110,或者十进制中的6。

JavaScript 位运算符 NOT (~)

NOT运算符就像相反的日子一样,它翻转所有位。但是有一个陷阱!在JavaScript中,它还反转符号并减去1。来看看:

let a = 5;  // 二进制为0101
console.log(~a);  // 十进制为-6

结果可能会让你感到惊讶!这是因为JavaScript使用二进制补码来表示负数。所以~5实际上是-6。

位运算符左移 (<<)

左移运算符就像一个传送带,将位向左移动,并在右侧添加0。每次移动实际上都会将数字加倍:

let a = 5;  // 二进制为0101
console.log(a << 1);  // 二进制为1010,十进制为10
console.log(a << 2);  // 二进制为10100,十进制为20

看看5如何通过一次移动变成10,两次移动变成20?就像魔法一样!

位运算符右移 (>>)

右移运算符的作用相反,将位向右移动。它有效地将数字减半(向下取整):

let a = 5;  // 二进制为0101
console.log(a >> 1);  // 二进制为0010,十进制为2

5除以2是2.5,但我们向下取整到2。

零填充右移运算符 (>>>)

这个运算符与>>类似,但它始终从左侧填充0,即使是负数:

let a = -5;  // 二进制为11111111111111111111111111111011 (32位)
console.log(a >>> 1);  // 二进制为01111111111111111111111111111101,十进制为2147483645

这个有点棘手!它主要用于当你需要将数字视为无符号时。

就这样,伙计们!你已经迈出了进入位运算符世界的第一步。这些运算符现在可能看起来有点抽象,但它们在处理二进制数据、创建哈希函数或优化某些算法时非常有用。

记住,熟能生巧。尝试使用这些运算符进行实验,很快你就能像专业人士一样轻松处理位!祝您编程愉快,愿位运算符与您同在!

Credits: Image by storyset