C-两数交换合集

C-两数交换合集两数交换方法在 c 语言中 将两个数进行交换 我知道的方法有 4 种 我自己倾向于方法 3

大家好,欢迎来到IT知识分享网。

两数交换方法

在c语言中,将两个数进行交换,我知道的方法有4种,我自己倾向于方法3。

方法1

#define SWAP1(a, b) {a = a + b; b = a - b; a = a - b;} void swap1(int* a, int* b) { 
    if (a == b) return; *a = *a + *b; *b = *a - *b; *a = *a - *b; } int a = 5; int b = 15; int c = 5; //SWAP1(a,a); //a的值为0 //SWAP1(a,c); //a,c的值不变 //SWAP1(b,c); //b,c的值交换 //swap1(&a,&a); //a的值不变 //swap1(&a,&c); //a,c的值不变 //swap1(&b,&c); //b,c的值交换 

方法2

异或交换

相同为0,相异为1

x^1 = !x x与1异或,x取反 —> 与1异或取反

x^0 = x x与0异或,x不变 —> 与0异或不变

value value
a b
a=a^b a^b b
b=a^b a^b a ^ b ^ b=a^0=a
a=a^b a ^ b ^ a a
b a

因为a ^ b=b ^ a 满足交换律,所以 a ^ b ^ a = b ^ a ^ a = b。

注意:

  1. 对同一个变量自身进行swap,结果为0;
  2. 对两个值相等的变量进行swap,显然两个变量的值不变;

介绍完异或交换的原理,接下来,上代码

#define SWAP2(a, b) {(a) ^= (b) ^= (a) ^= (b);} int a = 5; int b = 5; int c = 5; SWAP2(a,a);//a的值为0 SWAP2(b,c);//b和c的值仍为5 

所以在使用SWAP2(a,b)时,需要注意a,b不能是同一个变量。当然也可以将异或交换定义成函数

void swap2(int* a, int* b) { 
    if (a == b) //判断a,b是否是同一个变量 return; (*a) ^= (*b) ^= (*a) ^= (*b); } int a = 5; int b = 15; int c = 5; swap2(&a,&a); swap2(&b,&c); printf("a=%d, b=%d, c=%d\n", a, b, c); //a=5, b=5, c=15 

方法3

#define SWAP3(a, b) {a = a+b-(b=a);} int a = 5; int b = 15; int c = 5; //SWAP3(a,a); //a的值不变 //SWAP3(a,c); //a,c的值不变 //SWAP3(b,c); //b,c的值交换 

方法4

最简单直接的方法

#define SWAP4(a, b) ({int tmp = 0;tmp = a;a = b;b = tmp;}) void swap4(int* a, int* b) { 
    int tmp = 0; tmp = *a; *a = *b; *b = tmp; } int a = 5; int b = 15; int c = 5; //swap4(&a,&a); //a的值不变 //swap4(&a,&c); //a,c的值不变 //swap4(&b,&c); //b,c的值交换 

讨论群:
在这里插入图片描述

免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://haidsoft.com/150569.html

(0)
上一篇 2025-03-18 14:10
下一篇 2025-03-18 14:15

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注微信