MySQL 位运算

MySQL bitwise operations

我正在尝试理解 MySQL 中的位运算符。

我有:

SELECT 1 & 51 FROM bits = 1
SELECT 2 & 51 FROM bits = 2
SELECT 3 & 51 FROM bits = 3
SELECT 4 & 51 FROM bits = 0
SELECT 5 & 51 FROM bits = 1
SELECT 6 & 51 FROM bits = 2

对于SELECT 1 & 51 FROM bits,这是在询问第一个位 (1) 在 1 和 51 中都存在,如果是,那么我明白了。

但是 SELECT 6 & 51 FROM bits = 2 对我来说没有意义,因为第 6 位是 32(?),它不是 6,因为 6 是由第 2 位和第 4 位(?)组成的,但是32 出现在 51 中。

所以我对它的工作原理有点困惑,有人可以解释一下吗?

“6”不是指第六位。它指的是二进制值。 8 位:00000110.

如果您想要第六位,请使用 1<<6 或 32。

这两个参数不是位的索引 - 这意味着您用二进制表示每个数字,并独立地执行每个位之间的操作。

 6 in binary: 000110
51 in binary: 110011
AND           ======
              000010

结果 000010 是 2 的二进制表示。

(请注意,为清楚起见,前面的零被截断了)