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 的二进制表示。
(请注意,为清楚起见,前面的零被截断了)
我正在尝试理解 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 的二进制表示。
(请注意,为清楚起见,前面的零被截断了)