首页 > 解决方案 > 位操纵器如何在 mySQL 中工作(以本例为例)

问题描述

这是位操作的示例。我不明白如何(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  |

标签: mysqlsqlxor

解决方案


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

所以现在你有一种方法可以切换座位 0 和 1、2 和 3,或者,就此而言,可以切换座位 2 和 3、3 和 4。

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

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

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

另一种替代方法是映射1, 2, 3, 40, 1, 2, 3(with f(x) = x-1and g(x) = x+1),为您提供最终的 formula ((id-1)^1)+1


推荐阅读