2011年5月25日 星期三

XOR 運算子

Xor 運算子

在 C++ 裡面是用   ^  或是  XOR
兩變數相互作位元的羅輯互斥運算。

用個例子來介紹一下它的運算
A     0 1 0 1 1
B     0 0 0 1 0
----------------------------   A, B 分別是表示某個二進位的數字
C     0 1 0 0 1

C=A^B

由上面可以簡單看出,如果是 0 0 的組合得出來還是 0
如果是 1 0  就是 1
1 1 則得出 0

有幾個特別的情況~~
1. 任何數對零作用都是自己。
A  1 0 1 1
B  0 0 0 0
-------------
    1 0 1 1   = A
2. 自己對自己作用變成零。
A 1 1 1 0
B 1 1 1 0
-------------
   0 0 0 0 = 0

3. 照順序做下面三個指向完,A B 的值就對換了。
A = A ^ B
B = A ^ B
A = A ^ B


★ 這個算子的特性可以用做一些 mapping 、 換位的動作。


我會發現這個有趣的算子是在跟同事討論一個測網路流量的軟體中發現的~
程式的運作原理是指定一塊空間的資料,然後用 MPI 的function 讓它在 nodes 間互相copy。
那這時候,它必需要指定copy 檔案到除了source 端以外的其它node。
這時候就可以用上這個算子了。

把自己 rank 的編號當成 A 依度對 B( 0<B< max ) 作用。
就可以得出目的地了 ( max - 1 個)

int pair(int np,int p,int k)
{
    int q;
    q = p^k;
    if(q>np-1)
       return(-1);
    else
      return(q);
}



總覺得這種算子應該還有一些其它用途~
改天有聽到,再補充吧~~~


沒有留言:

張貼留言