顺序是:
00111011
我如何计算上述序列的奇偶校验位?这个问题来自 Databases- Jeffery ullman 的完整书(练习 13.4.1 a)
我不确定这个问题的答案应该是什么。
是不是很简单:
i)偶校验:1 的数量是 5(奇数)所以只需附加一个 1,答案是:001110111
ii)奇偶校验:同样,只需附加 0: 001110110
或者:
我在这里走错了路吗?我在网上查了一下,但找不到任何具体的东西。另外,课本中上述问题的文字不清楚。
顺序是:
00111011
我如何计算上述序列的奇偶校验位?这个问题来自 Databases- Jeffery ullman 的完整书(练习 13.4.1 a)
我不确定这个问题的答案应该是什么。
是不是很简单:
i)偶校验:1 的数量是 5(奇数)所以只需附加一个 1,答案是:001110111
ii)奇偶校验:同样,只需附加 0: 001110110
或者:
我在这里走错了路吗?我在网上查了一下,但找不到任何具体的东西。另外,课本中上述问题的文字不清楚。
是的,你的答案是正确的。对于给定的序列,
00111011
奇校验为001110110,奇偶校验位为零,因此代码中 1 的总数为 5,为奇数。
偶校验为001110111,奇偶校验位为 1,因此代码中 1 的总数为 6,这是一个偶数。
您也可以使用 XOR 即;00111011
0XOR0=0
0XOR0=0
0XOR1=1
1XOR1=0
0XOR1=1
1XOR0=1
1XOR1=0
0XOR1=1
, 最后一位是奇偶校验位;1 表示偶校验,0 表示奇校验。您应该将此位设为原始数字 (00111011) 的 LSB,从而变为 (001110111)。
unsigned char CalEvenParity(unsigned char data)
{
unsigned char parity=0;
while(data){
parity^=(data &1);
data>>=1;
}
return (parity);
}
奇偶校验的替代实现:
这涉及在整数中特定数字的连续位之间进行 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