話說為啥fec需要異或( ^/⊕ )操作呢?
異或:xor
異或運算規則:
0 xor 0 = 0
0 xor 1 = 1
1 xor 0 = 1
1 xor 1 = 0
異或運算特性:
1). a xor a = 0
2). a xor 0 = a
3). (a xor b) xor c = a xor (b xor c)
4). if a xor b = c then a xor c = b
異或的運算特性有兩點很好的應用
查詢
case 1:
乙個陣列,除了其中乙個元素,其他元素都為空,如何找到這個元素?
對陣列所有元素做異或的結果即為這個元素
利用了異或運算特性的1)、2)、3)
校驗&恢復
校驗&恢復主要利用的了異或的第四條特性:if a xor b = c then a xor c = b
乙個很好的應用例項是raid5
簡單描述下:
使用3塊磁碟(a、b、c)組成raid5陣列,當使用者寫資料時,將資料分成兩部分,分別寫到磁碟a和磁碟b
a xor b的結果寫到磁碟c
當讀取a的資料時,通過b xor c可以對a的資料做校驗
當a盤出錯時,通過b xor c也可以恢復a盤的資料
raid5的實現比上述的描述複雜多了,有興趣的同學看下raid5
FEC之異或運算應用
話說為啥fec需要異或 操作呢?異或 xor 異或運算規則 0 xor 0 0 0 xor 1 1 1 xor 0 1 1 xor 1 0 異或運算特性 1 a xor a 0 2 a xor 0 a 3 a xor b xor c a xor b xor c 4 if a xor b c then...
異或運算及其應用
異或是一種基於二進位制的位運算,用符號xor或者 表示,其運算法則是對運算子兩側數的每乙個二進位制位,同值取0,異值取1。它與布林運算的區別在於,當運算子兩側均為1時,布林運算的結果為1,異或運算的結果為0。交換律 a b b a 結合律 a b c a b c a b c d a b c 可以推出...
異或運算及其應用
異或是一種基於二進位制的位運算,用符號xor或者 表示,其運算法則是對運算子兩側數的每乙個二進位制位,同值取0,異值取1。它與布林運算的區別在於,當運算子兩側均為1時,布林運算的結果為1,異或運算的結果為0。交換律 a b b a 結合律 a b c a b c a b c d a b c 可以推出...