Re: [问题] XOR交换值问题

楼主: ptt0720 (湿湿)   2017-11-23 15:19:28
※ 引述《ptt0720 (湿湿)》之铭言:
: 语言:CPP
: 今天写quick sort的时候发现原本常用的交数值方法好像有观念上的问题
: https://i.imgur.com/GwH4NbM.png
: 我习惯的用法是第二十七行 直接用参考交换两个值
: 但是发现印出来后都是一堆0
:
我简单归纳一下讨论结果 如有不对请再补充
XOR拿来交换是可以的 但是如果要换阵列的元素 内存位置不能一样
如果 a = 0x0001 value = 3
b = 0x0001 value = 3
经过一次XOR之后 0x0001 ^ 0x0001 结果会是 0x0001
作者: galic (嘎利)   2017-11-23 15:56:00
you got it
楼主: ptt0720 (湿湿)   2017-11-23 16:16:00
谢谢大大
作者: alan23273850   2017-11-23 19:05:00
作者: tcn1john (momo)   2017-11-23 20:39:00
新手发问: 请问阵列内存位置互换会有效能问题吗?
作者: jerryh001   2017-11-23 20:43:00
阵列的元素"位置"不是可以交换的东西
作者: tcn1john (momo)   2017-11-23 20:44:00
弄懂了...是直接写入,不是互换位置,感谢回复
作者: CaptainH (Cannon)   2017-11-24 10:18:00
xor交换其实是比正常swap慢的因为正常swap只要三次赋值,xor交换还有额外三次xor运算总之是语义有歧义,执行有风险,无法一般化,速度反而慢的做法
作者: alan23273850   2017-11-24 10:44:00
所以没事不要用奇技淫巧
作者: galic (嘎利)   2017-11-24 11:16:00
但从pipeline CPU角度来看 Execute跟Write-back本来就不同stage 所以楼上C大说的理由不太完整....以前的ISA是真的有特殊理由去刻意使用XOR,但这都是历史了从现在的角度来看 XOR Swap的缺点主要是 可读性 以及编译器是否能理解XOR Swap,然后优化成合适的指令然后提一下,从计组的观点,目前XOR Swap的缺点应该是XOR必须经过运算才能得知结果 这会影响硬件能做的优化像是Branch Prediciton和Speculative Excution之类的所以这年头使用适当的算法跟资料结构 其他交给编译器就好
作者: Lipraxde (Lipraxde)   2017-11-24 13:39:00
这样换就省了点RAM看起来帅而已

Links booklink

Contact Us: admin [ a t ] ucptt.com