【问题标题】:MySQL bitwise operationsMySQL按位运算
【发布时间】: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.

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

【问题讨论】:

    标签: mysql binary bit-manipulation bitwise-operators


    【解决方案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
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多