发布于 2006-03-30 17:07:53
0楼
你觉迷惑的是可能是为什么将LB1不断右移,与LB2异或就能得到结果?好象与循环码的定义规则不符,其实这正是该算法的精髓所在
我们看看循环码的转换规则:先取 0 与最高位异或,得最高有效位,再用该有效位与次高异或,得到次高有效位……
0与任何数异或是不影响该位的(你可以看看循环码的码表,循环码和二进制码的最高位都是相同的就是这个道理),也就是说第一次有效异或运算实际上是拿最高位与次高位异或,正好LB1右移一位与LB2异或符合最高位的运算规则。那么你可能要问,整字节异或不是将结果后面的位都改变了吗?这也就是算法的精华了,最高位是0还是1决定了循环的次数,无论是奇次还是偶次,最终正好将异或的结果还原了
这只是转换规则在具体语言中的一种算法实现,避免了逐次取位,用较简洁的指令得到结果。我们知道S7-200的子程序中是不支持重复定义符号的,所以不能用重复定义的方法将字节分解成位,只能用掩码相与的方法取得位,实现起来会比较繁琐
生命存在的方式只有两种:腐烂或燃烧