MySQL按位运算

Posted

技术标签:

【中文标题】MySQL按位运算【英文标题】:MySQL bitwise operations 【发布时间】:2016-01-09 21:49:42 【问题描述】:

我正在尝试理解 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.

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

【问题讨论】:

【参考方案1】:

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

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

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

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

【讨论】:

所以说位“2”出现在 6 和 51 中,即使没有 4? 是的。 6=4+2; 51=32+16+2+1 所以 4 & 51 为 0 因为 4: 000100 和 51: 110011,并且 4 中的位在 51 中没有使用? @imperium2335 是的,完全正确。 所以 4 | 51 会返回 4,因为 000100 在 4 中?【参考方案2】:

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

如果您想要第六位,请使用 1

【讨论】:

所以Mysql是从右到左而不是像php那样从左到右? @imperium2335 。 . .文档将“1

以上是关于MySQL按位运算的主要内容,如果未能解决你的问题,请参考以下文章

c语言的按位运算符怎么操作!?

C语言中位移位运算符?

位运算

位运算符详解

仅使用按位运算反转数字

JavaSE学习:按位运算—数据结构(顺序分支循环)