如何计算以下位序列的奇偶校验位?
Posted
技术标签:
【中文标题】如何计算以下位序列的奇偶校验位?【英文标题】:How to calculate the parity bit of the following bit sequence? 【发布时间】:2013-03-13 13:00:45 【问题描述】:顺序是:
00111011
我如何计算上述序列的奇偶校验位?这个问题来自 Databases- The complete book by jeffery ullman (Exercise 13.4.1 a)
我不确定这个问题的答案应该是什么。
是不是就这么简单:
i)偶校验:1 的数量是 5(奇数)所以只需附加一个 1,答案是:001110111
ii)奇偶校验:同样,只需附加 0: 001110110
或者:
我在这里走错了吗?我在网上查了一下,但找不到任何具体的东西。另外,课本中上述问题的文字也不清楚。
【问题讨论】:
【参考方案1】:奇偶校验的替代实现:
这涉及在整数中特定数字的连续位之间进行异或。
x>>1 将值左移 1 位,& 1 得到数字最后一位的值。
整个序列的奇偶校验可以如下所示:- 即由于 XOR 的属性。
1 ^ 0 ^ 1 与 (1 ^ 0 ) ^ 1 相同,我们扩展相同。
def parity_val(x):
parity=0
while x>>1:
parity = (x & 1)^ ((x >>1) & 1)
x = x>> 1
return parity
【讨论】:
添加更多信息,说明为什么这是问题的答案。【参考方案2】:unsigned char CalEvenParity(unsigned char data)
unsigned char parity=0;
while(data)
parity^=(data &1);
data>>=1;
return (parity);
【讨论】:
用 '1' 初始化 Parity 变量以进行奇校验计算【参考方案3】:您也可以使用 XOR,即; 00111011
0XOR0=0
0XOR0=0
0XOR1=1
1XOR1=0
0XOR1=1
1XOR0=1
1XOR1=0
0XOR1=1
,最后一位是奇偶校验位; 1 表示偶校验,0 表示奇校验。您应该将此位设为原始数字 (00111011) 的 LSB,从而变为 (001110111)。
【讨论】:
【参考方案4】:是的,你的答案是正确的。对于给定的序列,
00111011
奇偶校验为001110110,奇偶校验位为零,因此代码中1的总数为5,为奇数。
偶校验为001110111,校验位为1,因此代码中1的总数为6,为偶数。
【讨论】:
以上是关于如何计算以下位序列的奇偶校验位?的主要内容,如果未能解决你的问题,请参考以下文章