C语言——实现两个数的交换(多种方法)
1.创建临时变量的
(1)直接在主函数中
#include<stdio.h>
int main(void)
{
int a = 10;
int b = 20;
int c = 0;//创建c为临时变量
printf("交换之前:a=%d,b=%d\n", a, b);
c = a;
a = b;
b = c;
printf("交换之后:a=%d,b=%d\n", a, b );
return 0;
}
(2)创建一个函数
//思路:将a和b的地址传过去,因为通过地址就可以找到代码,
将地址传过去,就要用指针来接收。
#include<stdio.h>
void exchange(int* pa, int* pb)
{
int c = 0;
c = *pa;
//将a备份到c中
//然后改变a
*pa = *pb;
*pb = c;
}
int main(void)
{
int a = 10;
int b = 20;
printf("交换之前:a = %d b = %d\n", a, b);
exchange(&a, &b);
printf("交换之后:a = %d b = %d\n", a, b);
return 0;
}
2.无临时变量的
(1)加减法 缺陷:当两个加在一起特别大的时候会有些二进制位的丢失——溢出
#include<stdio.h>
int main(void)
{
int a = 10;
int b = 20;
printf("交换之前:a=%d,b=%d\n", a, b);
a = a + b;
b = a - b;
a = a - b;
printf("交换之后:a=%d,b=%d\n", a, b);
return 0;
}
(2)
#include<stdio.h>
int main(void)
{
int a = 10;
int b = 20;
printf("交换之前:a=%d,b=%d\n", a, b);
//整型在内存中战32个比特位
//ab分别用二进制表示
//00000000000000000000000000001010
//00000000000000000000000000010100
//进行三次按位异或——相同为0,相异为1
a = a ^ b;
//00000000000000000000000000011110——这个所表示的数是30
//即现在的a变成了30
//*******现在要进行按位异或的ab分别是
//00000000000000000000000000011110
//00000000000000000000000000010100
b = a ^ b;
//得到
//00000000000000000000000000001010——这个所表示的数是10
//即现在的b变成了10
//*******现在要进行按位异或的ab分别是
//00000000000000000000000000011110
//00000000000000000000000000001010
a = a ^ b;
//得到
//00000000000000000000000000010100——这个所表示的数是20
//即现在的a变成了20
printf("交换之后:a=%d,b=%d\n", a, b);
return 0;
}