【问题标题】: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

或者:

我在这里走错了吗?我在网上查了一下,但找不到任何具体的东西。另外,课本中上述问题的文字也不清楚。

【问题讨论】:

    标签: networking parity hamming-code


    【解决方案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,为偶数。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-04-04
        • 2015-06-29
        • 2013-06-25
        • 2016-01-31
        • 2015-06-05
        • 2011-12-08
        • 1970-01-01
        相关资源
        最近更新 更多