这是位操作的示例。我不明白(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 |
答案 0 :(得分:1)
^是按位XOR运算符。按位x XOR 1
切换x的最后一位(1 xor 1 = 0
,0 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) ) )
应用于^1
,id+1
,然后通过将(id+1)^1
应用于此结果来撤消替换,您将得到x-1
。 / p>
另一种替代方法是将((id+1)^1)-1
映射到1, 2, 3, 4
(使用0, 1, 2, 3
和f(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