swap without temp var
有问起这个的, 没有多神奇, 汇编大概都有这么写的, 而且有些机器也有内建的exch指令, 用的就是这个:
x = x xor y;
y = x xor y;
x = x xor y;
证明只须把三个式子连起来...于是就有如下这个: x^=y^=x^=y;
用指针的时候会有问题, 如果&x = &y, 那么第一行就把x清零了...
在依赖pipeline的cpu上速度会比常规慢...每一行都得等前一行执行完
有问起这个的, 没有多神奇, 汇编大概都有这么写的, 而且有些机器也有内建的exch指令, 用的就是这个:
x = x xor y;
y = x xor y;
x = x xor y;
证明只须把三个式子连起来...于是就有如下这个: x^=y^=x^=y;
用指针的时候会有问题, 如果&x = &y, 那么第一行就把x清零了...
在依赖pipeline的cpu上速度会比常规慢...每一行都得等前一行执行完
RSS feed for comments on this post · TrackBack URI
iceblade Said,
September 24, 2007 @ 4:18 am
想起来了 C讲位异或的时候老师讲过
flanker27 Said,
September 24, 2007 @ 6:33 pm
恩~如果用+ -也可以 但是会溢出…