交换两个整形数据的三种方法

#include

int main(void)

{
	int a = 3, b = 5;
	int tmp = 0;
	//第一种方法	a = 3, b = 5
	printf("未交换数据前\n");
		printf("a = %d, b = %d", a, b);
		tmp = a;
		a = b;
		b = tmp;
	printf("\n交换数据后\n");
		printf("a = %d, b = %d", a, b);

printf("\n\n******************分割线******************\n\n");

	
	//第二种方法	经过上一次交换 a b 的值交换一次 a = 5 , b = 3
	printf("未交换数据前\n");
		printf("a = %d, b = %d", a, b);
			a ^= b ^= a ^= b;
	printf("\n交换数据后\n");
			printf("a = %d, b = %d", a, b);
	/*
	异或真值表:如果a、b两个值不相同,则异或结果为1。如果a、b两个值相同,异或结果为0
        ┏━━━━━━━━━━━━━━━━━━┓  
        ┃ x\y ┃  0  ┃  1   ┃
        ┃━━━━━━━━━━━━━━━━━━┃
        ┃  0  ┃  0  ┃  1   ┃
        ┃━━━━━━━━━━━━━━━━━━┃
        ┃  1  ┃  1  ┃  0   ┃
        ┗━━━━━━━━━━━━━━━━━━┛ 
	经过上一次交换 a b 的值已经交换过一次了
			a = 5 的二进制为: 0000 0101
			b = 3 的二进制为: 0000 0011
第一次异或	  a = a^b 结果为: 0000 0110 = 6(d)
			b = 3 的二进制为: 0000 0011
第二次异或	  a = a^b 结果为: 0000 0101 = 5(d)

	对于a异或两次b后结果仍然为:5
	*/
			
printf("\n\n******************分割线******************\n\n");

	//第三种方法		经过上一次交换 a b 的值再交换一次 a = 3 , b = 5
	printf("未交换数据前\n");
		printf("a = %d, b = %d", a, b);
		a = a + b; // a = 8, b = 5
		b = a - b; // a = 8, b = 3
		a = a - b; // a = 3, b = 5
	printf("\n交换数据后\n");
		printf("a = %d, b = %d\n", a, b);

	return 0;
}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章