交換兩個整形數據的三種方法

#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;
}

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