C语言按位异或运算实现两个数的交换(不用借助第三个变量)(多方法)

题目

题目来源于一道面试题

(C/C++)交换两个int变量的值,不能使用第三个变量,即a=3,b=5,交换之后a=5,b=3

解题

1. 自身处理

int main()
{
	int a = 3;
	int b = 5;
	
	a = a + b;
	b = a - b;
	a = a - b;
	return 0;
}
  • 这种的话就是直接运算,借助a+b的值。可你会发现有缺陷
  • 本身规定了是int类型,如果说a和b数值过大,那么会导致溢出的现象
  • 因此,在此想出了第二种方法,按位异或

2. 按位异或

a)了解按位异或 ^

  • ^ 按位异或(按二进制) (对应的二进制位进行异或,相同为0,相异为1)
  • 首先我们要清楚按位异或一些基本特点
    1. 当一个数a与其本身按位异或时,会等于0,即a ^ a = 0
    1. 当一个数a与0按位异或时,会等于其本身,即a ^ 0 = a

b)分析

a = a ^ b;
b = a ^ b;
a = a ^ b;
//转换完成

第一步:a = a ^ b

  • 结束后a的值为a ^ b

第二步:b = a ^ b = a ^ b ^ b(带入上式) = a ^ 0 = a

  • 刚开始b = a ^ b,将a = a ^ b代入得出b = a

第三步:a = a ^ b = a ^ b ^ a(带入上式) = a ^ a ^ b = 0 ^ b = b

  • 最后就是a = a ^ b,将a = a ^ b和b = a带入其中的出a = b

这样子的话就能将a与b的值不借助第三个变量而交换
在这里插入图片描述

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

itzzan

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值