CSAPP 习题2.10

2019-01-29  本文已影响0人  Jianbaozi
using namespace std;
void inplace_swap(int *x,int *y);
void reverse_array(int a[],int cnt);
int main(){
    int array[5]={1,2,3,4,5};
    reverse_array(array,5);
    for(int i=0;i<5;i++)
        cout<<array[i]<<' ';
        return 0;
}
void inplace_swap(int *x,int *y){
    *y=*x^*y;
    *x=*x^*y;
    *y=*x^*y;
}
void reverse_array(int a[],int cnt){
    int first,last;
    for(first=0,last=cnt-1;first<last;first++,last--)
        inplace_swap(&a[first],&a[last]);
}

对于任一向量a ,有~~a^a=0(^:XOR)~~
inplace_swap 利用了~~(a^b)^a=b~~属性
如果for循环中循环条件为first<=last,将导致中间元素被置为0.

上一篇 下一篇

猜你喜欢

热点阅读