0%

JS 按位异或

网上发现了个梗,就是如果如果你看到有人给你用手笔画一个六,你就知道要赶紧打110了,问为什么?

他说因为6的二进制是110,加上你笔画一个六有点像打电话的姿势,所以是在暗示你打110。

但更有意思的是有人在控制台里面执行了下面的命令

1
2^2 + 2^1 // 返回 7

告诉我答案是7

但更有意思的是有人在控制台里面执行了下面的命令

1
2
2^2 // 返回 0
2^1 // 返回 3

看了一下输出结果,发现是0和3,0 + 3 不应该是3吗?

然后我就去查了一下发现这个叫做按位异或,也就是 XOR

MDN - XOR

剩下的就是运算符优先的问题了,按位异或的优先级是最低的,所以 2^2 + 2^1 实际上是 2^(2+2)^1 = 2^4^1 = 7

这里面考察的是计算机中符号的含义和运算符的优先级,如果你不知道这个,那么你就会认为 2^2 + 2^1 = 6 这个错误的说法

那上面的6转换成110的二进制计算到底应该怎么写呢?

1
2**2 + 2**1 // 返回 6