シーケンスは次のとおりです。
00111011
上記のシーケンスのパリティビットを計算するにはどうすればよいですか?この質問はデータベースからのものです-ジェフリー・ウルマンによる完全な本(演習13.4.1 a)
この質問に対する答えがどうあるべきかわかりません。
それは次のように単純ですか?
i)偶数パリティ:1の数は5(奇数)なので、1を追加するだけで、答えは001110111になります。
ii)奇数パリティ:同様に、0を追加するだけです:001110110
または:
私はここで完全に間違った道を進んでいますか?ネットで調べましたが、具体的なものは見つかりませんでした。また、教科書の上記の質問のテキストは明確ではありません。
はい、あなたの答えは正しいです。与えられたシーケンスに対して、
111011
奇数パリティは111011であり、パリティビットはゼロであるため、コード内の1の総数は5であり、これは奇数です。
偶数パリティは1110111であり、パリティビットは1であるため、コード内の1の総数は6であり、これは偶数です。
unsigned char CalEvenParity(unsigned char data)
{
unsigned char parity=0;
while(data){
parity^=(data &1);
data>>=1;
}
return (parity);
}
XOR i.e; 00111011)を使用することもできます
0XOR0=0
0XOR0=0
0XOR1=1
1XOR1=0
0XOR1=1
1XOR0=1
1XOR1=0
0XOR1=1
、最後のビットはパリティビットです。偶数パリティの場合は1、奇数パリティの場合は0。このビットを元の番号(00111011)のLSBにして、(001110111)にする必要があります。
パリティの代替実装:
これには、整数の特定の数値の連続するビット間で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