C語言交換兩個變數的值的5種基本方法

sherlockjjobs發表於2020-11-30

C語言交換兩個變數的值的5種基本方法

1. 臨時變數法

建立一個臨時變數,用來作為傳遞值的中介

#include<stdio.h>

int main()
{
	int a=1, b=2, temp;
	temp = a;
	a = b;
	b = temp;
	printf("%d %d", a, b);
	return 0;
}

2. 加減交換法

先將a+b的值儲存在a中,然後用更改後的a和初始b的值進行減法就可以得到交換後的b的值,即a

#include<stdio.h>
int main()
{
	int a=1, b=2;
	a = a+b;	
	b = a-b;	//b = (a+b)-b = a
	a = a-b;	//a = (a+b)-a = b
	printf("%d %d", a, b);
	return 0;
}

3. 乘除交換法

跟加減交換法類似,只是將加減改為了乘除,但因此也引發了一個缺點:如果a,b的值過大,則可能導致越界,溢位

#include<stdio.h>
int main()
{
	int a=1, b=2;
	a = a*b;	
	b = a / b;	//b = (a*b)/ b = a
	a = a / b;	//a = (a*b)/ a = b
	printf("%d %d", a, b);
	return 0;
}

4. 異域交換法

先將a ^ b的值儲存到a中,然後a ^ b ^ b = a,可以把a的值的傳給b

#include<stdio.h>
int main()
{
	int a=1, b=2;
	a = a ^ b;	
	b = a ^ b;	
	a = a ^ b;	
	printf("%d %d", a, b);
	return 0;
}

5. 移位交換法

將int型別的a的值拆分為高16位和低16位,將分出來的一個16位作為暫存空間,即temp的作用

#include<stdio.h>
int main()
{
	int a=1, b=2;
	a <<= 16;
	a |= b;
	b = a >> 16;
	a = a & 0xffff;
	printf("%d %d", a, b);
	return 0;
}

相關文章