我知道这些。还有其他方法吗?哪一个更好?
我认为最好的方法是XOR实施。有什么建议吗?
答案 0 :(得分:4)
任何不使用临时变量/寄存器的东西都保证不会一直工作。因此不建议使用它。
按位XOR交换不适用于同一个变量。(http://en.wikipedia.org/wiki/XOR_swap_algorithm#Reasons_for_avoidance_in_practice)
'没有临时变量交换的算术'会出现溢出问题。
另请注意,如果使用临时进行简单交换,则编译器足够智能,可以在不使用临时变量的情况下将其转换为程序集。如果你试图过度智能,那么
答案 1 :(得分:1)
这两个二元操作#
和@
是彼此相反的,以下算法也会交换a和b的值:
a = a # b
b = a @ b
a = a @ b
希望这有帮助。
答案 2 :(得分:0)
我认为使用临时变量解决方案要好得多,因为:
查看以下链接:
答案 3 :(得分:0)
也可以是元组解包:
Python 2.7.1 (r271:86882M, Nov 30 2010, 10:35:34)
[GCC 4.2.1 (Apple Inc. build 5664)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> a = 4
>>> b = 23
>>> a, b = b, a
>>> a
23
>>> b
4
>>>
答案 4 :(得分:0)
根据您的语言和选项的复杂程度,选项d)是交换内部指针。例如,如果您有自己的字符串对象(实际上您使用的是您喜欢的语言的标准库),它可能包含整数长度和指向存储字符串的内存的指针。交换字符串对象的实例时,只交换长度和指向数据的指针,而不是数据本身。