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

时间:2013-03-23 19:38:07

标签: networking parity hamming-code

序列是:

00111011

如何计算上述序列的奇偶校验位?这个问题来自数据库 - 完整的书由jeffery ullman(练习13.4.1 a

我不确定这个问题的答案应该是什么。

是否如此简单:

i)偶数奇偶校验:1的数量是5(奇数)所以只需追加1,答案是:001110111

ii)奇怪的奇偶校验:同样,只需追加0:001110110

OR:

我在这里走错了路吗?我抬头看网,但找不到任何具体的东西。此外,教科书中上述问题的文字也不清楚。

4 个答案:

答案 0 :(得分:10)

是的,你的答案是正确的。对于给定的序列,

<强> 00111011

奇数奇偶校验 001110110 ,奇偶校验位为零,因此代码中1的总数为5,这是一个奇数。

偶数奇偶校验 001110111 ,奇偶校验位为1,因此代码中1的总数为6,即偶数。

答案 1 :(得分:2)

unsigned char CalEvenParity(unsigned char data)
{
unsigned char parity=0;

while(data){
        parity^=(data &1);
        data>>=1;
            }
return (parity);
}

答案 2 :(得分:1)

您也可以使用XOR,即; 00111011

0XOR0=0
0XOR0=0
0XOR1=1
1XOR1=0
0XOR1=1
1XOR0=1
1XOR1=0
0XOR1=1

,最后一位是奇偶校验位; 1表示偶校验,0表示奇校验。你应该把这个位设为原始数字(00111011)的LSB,从而成为(001110111)。

答案 3 :(得分:0)

奇偶校验的替代实现:

这涉及在整数中特定数字的连续位之间进行XOR。

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