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