“怎么交换两组数?”
当时有人回答用中间变量,这是一种常用的方法。这个思路好比以下例子:一杯果汁A、一碗牛奶B,现在要互换一下容器,即把A换到碗里,B换到杯里。只有借助第3个容器C。操作是A--->C,B---->A,C----->B,这样才能完成交换。
有人回答用加减法,思路不错:
a=3;b=5;
a=a+b;
b=a-b;
a=a-b;
但当时我提出有溢出问题,如235+122怎么办,设定a、b均为unsigned char;如果均为unsigned int同样有问题,不能用程序来限定a、b值的范围,特别是ADC的值。
我日志记录的不用中间数交换两个变量的方法,均利用C语言的异或运算。
异或逻辑:对应的位相比较,同=0,异=1,实际上可以理解就“按位求异”,即“异为真,同为假”
举例:
xxxx 1001 ^ 0000 1111 = xxxx 0110(后4位翻转)
xxx1 xxxx ^ 1 0000 =xxx0 xxxx
xxx0 xxxx ^ 1 0000 =xxx1 xxxx
程序如下:
unsigned int aa=3456,bb=7890;
void main( void )
{
aa=aa^bb;
bb=bb^aa;
aa=aa^bb;
}
看的一脸懵逼,确实可以交换,但不知道为什莫,先记录下来,方法还是很不错的