位操纵器如何在mySQL中工作(在此示例中)

时间:2019-06-14 02:28:14

标签: mysql sql xor

这是位操作的示例。我不明白(id+1)^1-1如何给出显示的输出值。请帮忙。

位操作表达式(id+1)^1-1可以在切换后计算新的id。

SELECT id, (id+1)^1-1, student FROM seat;


| id | (id+1)^1-1 | student |

|----|------------|---------|

| 1  | 2          | Abbot   |

| 2  | 1          | Doris   |

| 3  | 4          | Emerson |

| 4  | 3          | Green   |

| 5  | 6          | Jeames  |

2 个答案:

答案 0 :(得分:1)

^是按位XOR运算符。按位x XOR 1切换x的最后一位(1 xor 1 = 00 xor 1 = 1),因此它交换0和1、2和3,依此类推。

因此,现在您可以切换座位0和1、2和3,或者就此而言,切换座位2和3、3和4。

要使用它与2、3和4交换1,您可以先将1, 2, 3, 4映射到2, 3, 4, 5,应用XOR,然后将结果映射回{{1} }。

1, 2, 3, 4映射到1, 2, 3, 4的函数是2, 3, 4, 5。相反的是f(x) = x+1

所以您得到的是:g(x) = x-1。这正是您的公式:将h(x) = g( xor1( f(x) ) )应用于^1id+1,然后通过将(id+1)^1应用于此结果来撤消替换,您将得到x-1。 / p>

另一种替代方法是将((id+1)^1)-1映射到1, 2, 3, 4(使用0, 1, 2, 3f(x) = x-1),从而得到最终公式g(x) = x+1

答案 1 :(得分:1)

让我向您介绍其完成方式:

首先,^是XOR运算,所以:

0^0 = 0
1^0 = 1
0^1 = 1
1^1 = 0

请注意,1 = 001是二进制形式(我只给出了与下面的解释有关的3位),例如2^1 = 010^001

    010
XOR 001
-------
    011 = 3

id |  binary id | id + 1 | binary id + 1 | binary (id + 1) ^ 1 | decimal (id + 1) ^ 1 | (id + 1) ^ 1 - 1
1  |  001       | 2      | 010           | 011                 | 3                    | 2
2  |  010       | 3      | 011           | 010                 | 2                    | 1
3  |  011       | 4      | 100           | 101                 | 5                    | 4
4  |  100       | 5      | 101           | 100                 | 4                    | 3
5  |  101       | 6      | 110           | 111                 | 7                    | 6