Skip to content

JS 按位异或运算详解

Published: at 05:25 PMSuggest Changes

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

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

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

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

告诉我答案是 7

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

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 的二进制计算到底应该怎么写呢?

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

Previous Post
ThreeJS 实现汽车 3D 展示
Next Post
Git 获取代码行数