首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >交换两个变量值而不使用第三个变量

交换两个变量值而不使用第三个变量
EN

Stack Overflow用户
提问于 2009-12-01 21:22:21
回答 22查看 119.9K关注 0票数 107

面试中被问到的一个非常棘手的问题。

交换两个变量的值,如a=10b=15

通常,要交换两个变量值,我们需要第三个变量,如下所示:

代码语言:javascript
复制
temp=a;
a=b;
b=temp;

现在的要求是,交换两个变量的值,而不使用第三个变量。

EN

回答 22

Stack Overflow用户

发布于 2009-12-01 21:42:33

一般形式是:

代码语言:javascript
复制
A = A operation B
B = A inverse-operation B
A = A inverse-operation B 

但是,您必须潜在地注意溢出,而且并不是所有的操作都有一个为该操作定义的所有值定义良好的逆值。例如*和/直到A或B为0为止

xor特别令人满意,因为它是为所有int定义的,并且是它自己的逆数

票数 94
EN

Stack Overflow用户

发布于 2009-12-01 21:26:12

代码语言:javascript
复制
a = a + b
b = a - b // b = a
a = a - b
票数 85
EN

Stack Overflow用户

发布于 2009-12-01 21:28:05

正如manu已经提到的,XOR算法是一种流行的算法,它适用于所有整数值(包括指针,然后加上一些运气和强制转换)。为了完整起见,我想提到另一个功能较弱的加/减算法:

代码语言:javascript
复制
A = A + B
B = A - B
A = A - B

在这里,你必须小心溢出/下溢,但除此之外,它也能正常工作。您甚至可以在浮点数/双精度数上尝试此操作,因为不允许对这些浮点数/双精度数执行XOR运算。

票数 19
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1826159

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档