C实现交换两个数重点:不使用三方变量而使用异或实现

Posted 孤寒者

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C实现交换两个数重点:不使用三方变量而使用异或实现相关的知识,希望对你有一定的参考价值。

本文讲解一个很基础的面试题——交换两个数。

  1. 使用三方变量解决:
#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;
 

  1. 不使用三方变量,基础版实现:
#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;
 

但是使用使用加减法会导致溢出而报错,所以需要注意!

  1. 不使用三方变量,进阶版实现(使用异或^运算符):

按位异或运算符:相同为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实现交换两个数重点:不使用三方变量而使用异或实现的主要内容,如果未能解决你的问题,请参考以下文章

如何不运用第三方变量实现两个数的交换

异或运算实现两个数的交换

运用异或运算实现两个数不通过中间变量交换值的原理分析

java面试之位运算(如何不通过第三方变量交换两个数字,效率最高的乘法运算)

C语言实现两个数交换的最优方案

如何不用第三个变量实现两个数的交换