PTT
Submit
Submit
选择语言
正體中文
简体中文
PTT
C_and_CPP
[问题] XOR交换值问题
楼主:
ptt0720
(湿湿)
2017-11-23 11:10:44
语言:CPP
今天写quick sort的时候发现原本常用的交数值方法好像有观念上的问题
https://i.imgur.com/GwH4NbM.png
我习惯的用法是第二十七行 直接用参考交换两个值
但是发现印出来后都是一堆0
后来交叉比对后发现是XOR交换值的问题
想请问一下是不是阵列用XOR交换数值会出错?
想请问一下原因 麻烦各位大大了
作者:
Hazukashiine
(私は幸せです)
2017-11-23 11:42:00
One registeris is cheap.认真回 那个你这个写法啊 是 UB 喔不能在同一个 SP 区间赋值两次
楼主:
ptt0720
(湿湿)
2017-11-23 11:44:00
请问UB是什么意思
作者:
Hazukashiine
(私は幸せです)
2017-11-23 11:45:00
Undefined Behavior
楼主:
ptt0720
(湿湿)
2017-11-23 11:46:00
原来如此 我之前都这样做 然后没出错 我以为可以这样子
作者:
Hazukashiine
(私は幸せです)
2017-11-23 11:46:00
简单说 要把异或赋值拆成三行写才行
楼主:
ptt0720
(湿湿)
2017-11-23 11:49:00
https://i.imgur.com/qS5A6kA.png
这是原本写法的内存贴上来给大家参考 不要踩雷了
作者:
stupid0319
(征女友)
2017-11-23 11:58:00
原本写法的没差啊!?a跟b的值对调了不是吗
楼主:
ptt0720
(湿湿)
2017-11-23 12:05:00
我也不清楚 求解答@@我原本的写法交换完 内存不是对调 是不一样 如图然后在main里面内存少一个bit是因为0省略掉了?
作者:
alan23273850
2017-11-23 12:12:00
要不要改成非阵列的写法观察看看,假设a,b,c,d之类而且楼主30行是不是怪怪的
作者:
CaptainH
(Cannon)
2017-11-23 12:16:00
就算拆成三行,a=b 时会让 a,b 都变成0
楼主:
ptt0720
(湿湿)
2017-11-23 12:24:00
30行原本是SWAP 会印出一堆0 资料里没有0
作者:
galic
(嘎利)
2017-11-23 12:29:00
你推文那张图是少了空白吧 位址明明一样xor swap 会 zero out 很明显就是你x y 都是同一个“空间”a b
作者:
boss0405
(boss)
2017-11-23 13:10:00
warning: operation on 'a' may be undefined [-Wsequence-point]
作者:
peterwu4
(notd)
2017-11-23 13:53:00
用mingw的c++帮你试,这样换的过来~ 4.9.2 32bit环境
作者:
galic
(嘎利)
2017-11-23 14:30:00
就你i j index一样会zero out,加个判断式index一样不用swap…
楼主:
ptt0720
(湿湿)
2017-11-23 14:42:00
请问一下zero out是什么意思index一样会跑出零 谢谢大大解答 请问我要如何搜寻这方面的知识q
作者:
galic
(嘎利)
2017-11-23 15:55:00
zero out就是被清成0啦 XD
作者:
peterwu4
(notd)
2017-11-23 16:02:00
xor自己XD 我晚惹~
作者:
LPH66
(-6.2598534e+18f)
2017-11-23 17:05:00
虽然晚了, 我的
#1Deo3lyi
这篇也可参考一下然后如上面所说, 即使写三条碰到 a b 同位置也会出事
作者:
kingofsdtw
(ä¸èƒ½é–’下來!!)
2017-11-24 19:12:00
你自己都看不懂了...为何要写一些要动脑的coding style?compiler会最佳化..别害同事
作者:
steve1012
(steve)
2017-11-25 02:48:00
效能瓶颈地方通常不是这个 swap…
继续阅读
[问题] 关于DEV-C++ 的问题
FoxTz
Re: [问题] HID 多软件握手问题
MOONY135
[问题] codeforces #447 problem B
GYLin
Re: 关于tree traversal
LPH66
关于tree traversal
yang20913
[问题] HID 多软件握手问题
MOONY135
[问题] cin.get()与cin.getline()有什么不同?
freexq
Re: [问题] void指标输出值问题
Hazukashiine
[问题] void指标输出值问题
rice9547
[心得] 浮点和十进制转换之3种方法
eecheng87
Links
booklink
Contact Us: admin [ a t ] ucptt.com