C实现交换两个数重点:不使用三方变量而使用异或实现
Posted 孤寒者
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C实现交换两个数重点:不使用三方变量而使用异或实现相关的知识,希望对你有一定的参考价值。
本文讲解一个很基础的面试题——交换两个数。
- 使用三方变量解决:
#include<stdio.h>
int main()
int a = 4;
int b = 5;
int c; //三方变量
printf("交换前:a=%d\\tb=%d\\n", a, b);
c = a;
a = b;
b = c;
printf("交换后:a=%d\\tb=%d",a, b);
return 0;
- 不使用三方变量,基础版实现:
#include<stdio.h>
int main()
int a = 4;
int b = 5;
printf("交换前:a=%d\\tb=%d\\n", a, b);
a = a + b; // a是和;b不变
b = a - b;
a = a - b;
printf("交换后:a=%d\\tb=%d",a, b);
return 0;
但是使用使用加减法会导致溢出而报错,所以需要注意!
- 不使用三方变量,进阶版实现(使用异或^运算符):
按位异或运算符:相同为0不同为1
#include<stdio.h>
int main()
int a = 4; //二进制:100
int b = 5; //二进制:101
printf("交换前:a=%d\\tb=%d\\n", a, b);
a = a ^ b; // a=001;b=101
b = a ^ b; // a=001;b=100
a = a ^ b; // a=101;b=100
printf("交换后:a=%d\\tb=%d",a, b);
return 0;
原理讲解:
- 两个被交换数异或会得到一个中间值,两个被交换数中的任一个数和中间值异或就会得到另一个被交换数。
以上是关于C实现交换两个数重点:不使用三方变量而使用异或实现的主要内容,如果未能解决你的问题,请参考以下文章