如何计算以下位序列的奇偶校验位?

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,为偶数。

【讨论】:

以上是关于如何计算以下位序列的奇偶校验位?的主要内容,如果未能解决你的问题,请参考以下文章

奇偶校验

使用标记/空间奇偶校验和无奇偶校验有啥区别?

计算奇偶校验

确定 MIPS 中数字的位表示的奇偶校验

奇偶校验位

奇偶校验位