CExercise_04_1运算符_4交换两个不同整数的值
题目:
给定两个不同的整数 a 和 b,请交换它们两个的值。(不要定义函数来实现,直接在main函数里实现)
关键点
异或: 相同为0,不同为1
`异或运算(XOR) 的以下特性:
a ^ a = 0(任何数和自己异或结果为 0)
a ^ 0 = a(任何数和 0 异或结果不变)
异或运算满足交换律和结合律(即 a ^ b ^ a = b)
分析:
注意细节 :在 printf 语句中:缺少逗号 分隔格式字符串和变量参数
代码
//方法一: 利用位运算,完成两个元素之间的交换
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
int main(void) {
int a = 5, b = 8;
//利用异或运算 b=a^b^a
a = a ^ b; // a=13,b=8
b = a ^ b; // a=13,b=5
a = a ^ b; // a=8,b=5
//int tmp = a; //利用临时变量的思想,交换两个元素
//a = b;
//b = tmp;
printf("a = %d,b = %d\n", a, b);
return 0;
}
//方法二
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
int main(void) {
int a = 100, b = 200;
int tmp = a; //利用临时变量的思想,交换两个元素
a = b;
b = tmp;
printf("a = %d,b = %d\n", a, b);
return 0;
}
解决方案总结:
1 ) & 运算符不能放在字符串外面,应该用 %d 占位符来格式化输出。
2) 语法错误 在 printf 语句中:缺少逗号 分隔格式字符串和变量参数。