话说为啥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)

case 2:
给一个很大的数组,里面有两个数只出现过一次,其他数都出现过两次,把这两个数找出来?
这个case复杂一些,有兴趣的同学可以参考:一个百度的面试题目

校验&恢复

校验&恢复主要利用的了异或的第四条特性: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

最新文章

  1. 谈谈一些有趣的CSS题目(六)-- 全兼容的多列均匀布局问题
  2. POJ2914 (未解决)无向图最小割|Stoer-Wagner算法|模板
  3. Spark Netty与Jetty (源码阅读十一)
  4. ok
  5. Java基础:继承,封装,多态,抽象类,接口
  6. java readLine()
  7. CentOS 6.4安装配置LNMP服务器(Nginx+PHP+MySQL)
  8. javaWeb中struts开发——Bean标签
  9. Operator overloading
  10. phpstorm10.0.1和webstorm11注册
  11. 火车车次查询-余票查询--Api接口
  12. asp.net 检查文件夹和文件是否存在
  13. OpenCV2.x自学笔记——固定阈值
  14. eclipse 常用插件 整理
  15. pat 1001-1010
  16. 十分钟释疑Oracle中“小表超慢”之谜(SQL调优/SQL优化)
  17. 【BZOJ 3569】 DZY Loves Chinese II
  18. [LeetCode] Insert into a Binary Search Tree 二叉搜索树中插入结点
  19. Java初学者容易犯的代码错误
  20. struts2框架-----Action

热门文章

  1. 查看文档的后几行命令:tail
  2. 使用CSDN CODE来存放OPENSTACK位于GITHUB上的源代码
  3. 执行动态的delphi脚本
  4. Myeclipse 文件注释和解注释
  5. 第一个Spring Boot程序启动报错了(番外篇)
  6. centos 时区正确,时间不对
  7. 使用阿里云的PyPI源
  8. 关于随机浏览头伪装fake-UserAgent
  9. MySQL root 密码重置
  10. spring-boot2