C语言异或交换两个数的原理解析

 我来答
舒适还明净的海鸥i
2022-06-11 · TA获得超过1.7万个赞
知道小有建树答主
回答量:380
采纳率:0%
帮助的人:69.8万
展开全部

大厂面试题:不使用第三变量交换两个数的值

常用的交换两个数值的方法一般是采用第三个变量,这种方法简单易懂,用代码举例

这么简单的题目肯定不是面试官想要的,所以就引出了这次要讨论的内容:在不使用第三个变量的前提下交换两个变量的值。稍加思索也能给出解决方案

这种算法看起来是解决了问题,但是还存在缺陷,使用加减法会导致溢出从而报错,出现隐患;还有进一步优化的空间 。

首先要介绍一个运算符^,按位异或运算符:相同为0不同为1

注:括号内为二进制数值,标红的为中间值。
被交换数的值为3(011)和5(101),中间值是6(110),这样程序可看作:
a=3(011),b=5(101);
3(011)^5(101)= 6(110) =a,此时:a= 6(110) ,b=5(101);
6(110) ^5(101)=3(011)=b,此时:a= 6(110) ,b=3(011);
6(110) ^3(011)=5(101)=a,此时:a=5(101),b=3(011);

两个被交换数异或会得到一个中间值,两个被交换数中的任意一个和中间值异或就会得到另一个被交换数。

初始的状态: 此时a=被交换数 3 ,b=被交换数 5
第一次异或:3和5异或得到中间值 6 放到a里;
此时a=中间值 6 ,b=被交换数 5
第二次异或:5和中间值6异或得到另一个被交换数 3 放到b内,这时已经交换了一半;
此时a=中间值 6 ,b=被交换数 3
第三次异或:3和中间值6异或得到另一个被交换数 5 放到a内,此时交换完成;
此时a=被交换数 5 ,b=被交换数 3

已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式