|
发表于 2014-1-16 10:03:40
|
显示全部楼层
解:
1.异或操作时将相同的位置零,相异的位置1,举例:A=00001010B,B=00000101B,A = A ^ B,此时,A=00001111B,B=00000101B,第二句B = A ^ B,A = 00001111B,而此时B=00001010B,第三句,A = A ^ B,A被赋值新值,00000101B,B的值没变,实现了不用中间变量进行对调,可以用数学归纳法证明,对于所有的二进制数,上述操作均可实现该功能。另外,小提示:要对数进行操作,要用地址传递,如果直接对数进行运算,不改变原先的数据不要传递指针数据。
2.牵扯到异或操作。原理如1开头的那句话,对于奇数个数据,中间一个必然是将自己跟自己进行异或,并赋值给自己,比如:C = 00100101B,相异的取1,相同取0,C^C,每一位一定相同,那么结果必然是0,而传递时传递给异或双方中的一个变量,现在两个变量都是它自己,自然置自己为0,而继续异或操作,还是对自己00000000B,进行操作,所以结果必然是0。
3.我比较笨,只能想到最基本方法解决,修改reverse_array如下:
void reverse_array(int a[], int count)
{
int first, last;
for( first=0, last=count-1; first <= last; first++, last-- )
{
if(first != last)
{
inplace_swap(&a[first], &a[last]);
}
}
}
请小甲鱼老师和各位鱼友指正。 |
|