前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >C实现不用临时变量交换两个数的值(一行代码)

C实现不用临时变量交换两个数的值(一行代码)

作者头像
宋天伦
发布2023-10-18 09:13:55
2080
发布2023-10-18 09:13:55
举报
文章被收录于专栏:frytea

本文 首发于 🌱 煎茶,请注明 来源。

最近看到一个问题感觉很有意思:

“如何在不申请临时变量的情况下交换两个数的值?”

思考许久没有思路,查阅一番发现方法不少,在这里介绍四种方法:

方法一#

代码语言:javascript
复制
void swap(int *p, int *q)
{
    *a = *a ^ *b;
    *b = *b ^ *a;
    *a = *a ^ *b;
}

提示:异或运算符 ^ 也称 XOR 运算符,它的规则是若参加运算的两个二进位同号,则结果为 0 (假);异号为 1(真)。即 0 ^ 0 = 0 , 0 ^ 1 = 1 , 1 ^ 0 = 1 , 1 ^ 1 = 0

代码语言:javascript
复制
计算实例:

a = 3 -> 0000 0011
b = 4 -> 0000 0100

step1:
	a = a ^ b
	->  0000 0011
	 ^  0000 0100
	  = 0000 0111 -> 7

step2:
	b = b ^ a
	->  0000 0100
	 ^  0000 0111
	  = 0000 0011 -> 3

step3:
	a = a ^ b
	->  0000 0111
	 ^  0000 0011
	  = 0000 0100 -> 4

方法二#

代码语言:javascript
复制
void swap(int *p, int *q)
{
    *a = *a + *b;
    *b = *a - *b;
    *a = *a - *b;
}

方法三#

代码语言:javascript
复制
void swap(int *p, int *q)
{
    *a = *a + *b - (*b = *a);
}

C/C++ 中 ( A = B ) 返回得到是赋值号( = )的左面的值

代码语言:javascript
复制
计算实例:

a = 3;
b = 4;

a = 3 + 4 - (b = 3)
  = 3 + 4 - 3
  = 4;

-> a = 4;
-> b = 3;

方法四#

代码语言:javascript
复制
void swap(int *p, int *q)
{
    *a ^= *b ^= *a ^= *b;
}
代码语言:javascript
复制
计算实例:

a = 3;
b = 4;

a = 3 ^ 4 = 7;
b = 4 ^ 7 = 3;
a = 7 ^ 3 = 4;

-> a = 4;
-> b = 3;

参考文献#

注:本作品采用 知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议 进行许可。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 方法一#
  • 方法二#
  • 方法三#
  • 方法四#
  • 参考文献#
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档