#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;
}
交換兩個整形數據的三種方法
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.