Skip to main content

03.赋值

交换赋值--异或方式

示例代码
    foo := 1
bar := 2
bar = foo ^ bar
foo = foo ^ bar
bar = foo ^ bar
fmt.Printf("foo: %v \n", foo)
fmt.Printf("bar: %v \n",bar)

输出结果

输出结果
foo: 2 
bar: 1

异步就是对比2个参数的每个比特位一一对应比较,比特位相同的为0, 不同的为1, 然后算出一个新的值,这里称为异或值。画图大概是这样:

示例图
    00000001   <-- foo
00000010 <-- bar
^ ----------
00000011 <-- 异或值

那么这个值有什么用呢?首先这个值是由2个值比较出来的结果,也就是通过比较,这3个值就关联起来了。从而拿到任意的2个值就可以通过比较的方式 推导出第3个值。所以 上面foobar在没有声明第3个变量名来充当临时保存交的换值,从而完成双值的互换就是利用这种推导关系把值给推导出来。