鱼C论坛

 找回密码
 立即注册
查看: 4585|回复: 15

两个数字交换

[复制链接]
发表于 2012-11-11 20:01:18 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
C语言中若需要交换两个变量的值,除了通常使用的借用中间变量进行交换外,还可以利用异或,仅使用两个变量进行交换,如:   a=a^b;   b=a^b;   a=a^b;   这样就完成了a与b的交换。
小甲鱼最新课程 -> https://ilovefishc.com
发表于 2012-11-11 22:19:48 | 显示全部楼层
这个  没用过  太偏了吧
小甲鱼最新课程 -> https://ilovefishc.com
发表于 2012-11-12 13:14:39 | 显示全部楼层
楼主 异或是什么意思啊 详细讲讲  你这个算法我没看懂
小甲鱼最新课程 -> https://ilovefishc.com
 楼主| 发表于 2012-11-12 15:41:48 | 显示全部楼层

异或就是换成二进制的一种逻辑算法 两个数每位比较 相同则为0 不同为1
小甲鱼最新课程 -> https://ilovefishc.com
 楼主| 发表于 2012-11-12 15:43:06 | 显示全部楼层
FlyDu 发表于 2012-11-11 22:19
这个  没用过  太偏了吧

呵呵 能不引入第三个变量呀 拓宽下思路~~语句也比引入第三变量来的少 何乐不为?
小甲鱼最新课程 -> https://ilovefishc.com
发表于 2012-11-12 20:19:58 | 显示全部楼层
a^=b^=a^=b
小甲鱼最新课程 -> https://ilovefishc.com
发表于 2012-11-12 21:54:19 | 显示全部楼层
不错不错。。。
小甲鱼最新课程 -> https://ilovefishc.com
 楼主| 发表于 2012-11-12 22:20:28 | 显示全部楼层
呀喝 上首页了
小甲鱼最新课程 -> https://ilovefishc.com
发表于 2012-11-13 15:02:45 | 显示全部楼层
还可以 a=a+b; b=a-b; a=a-b;
小甲鱼最新课程 -> https://ilovefishc.com
发表于 2012-11-14 16:13:28 | 显示全部楼层
新人 不是很懂
小甲鱼最新课程 -> https://ilovefishc.com
 楼主| 发表于 2012-11-15 20:38:38 | 显示全部楼层
愛~の歌聲 发表于 2012-11-13 15:02
还可以 a=a+b; b=a-b; a=a-b;

呀 也是一种方法呀 高人~
小甲鱼最新课程 -> https://ilovefishc.com
 楼主| 发表于 2012-11-15 20:40:28 | 显示全部楼层
愛~の歌聲 发表于 2012-11-13 15:02
还可以 a=a+b; b=a-b; a=a-b;

都换成乘法跟除法是不是也可以的
小甲鱼最新课程 -> https://ilovefishc.com
发表于 2012-11-16 17:49:19 | 显示全部楼层
白菜/kl 发表于 2012-11-15 20:40
都换成乘法跟除法是不是也可以的

换成乘法没试过 因为8/3=2
小甲鱼最新课程 -> https://ilovefishc.com
发表于 2012-11-16 23:00:38 | 显示全部楼层
a,b不能使小数,指针最好也不要这么交换
小甲鱼最新课程 -> https://ilovefishc.com
发表于 2012-11-16 23:03:34 | 显示全部楼层
三种方法:异或法,插值法,中间变量法,具体来说异或法是最好的,因为在gcc中编译成汇编程序之后异或法比插值法要少两行代码,而又比中间变量法少定义一个变量,尤其是对于一些比较多的数据交换,用异或法师非常高效的,但是要注意使用场合,不能用来交换小数和指针
小甲鱼最新课程 -> https://ilovefishc.com
发表于 2012-11-17 13:57:39 | 显示全部楼层
同感,这个方法效率高
小甲鱼最新课程 -> https://ilovefishc.com
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-11-16 07:30

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表