序列是:
00111011
如何计算上述序列的奇偶校验位?这个问题来自数据库 - 完整的书由jeffery ullman(练习13.4.1 a )
我不确定这个问题的答案应该是什么。
是否如此简单:
i)偶数奇偶校验:1的数量是5(奇数)所以只需追加1,答案是:001110111
ii)奇怪的奇偶校验:同样,只需追加0:001110110
OR:
我在这里走错了路吗?我抬头看网,但找不到任何具体的东西。此外,教科书中上述问题的文字也不清楚。答案 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