web-dev-qa-db-ja.com

次のビットシーケンスのパリティビットを計算するにはどうすればよいですか?

シーケンスは次のとおりです。

00111011

上記のシーケンスのパリティビットを計算するにはどうすればよいですか?この質問はデータベースからのものです-ジェフリー・ウルマンによる完全な本(演習13.4.1 a

この質問に対する答えがどうあるべきかわかりません。

それは次のように単純ですか?

i)偶数パリティ:1の数は5(奇数)なので、1を追加するだけで、答えは001110111になります。

ii)奇数パリティ:同様に、0を追加するだけです:001110110

または:

私はここで完全に間違った道を進んでいますか?ネットで調べましたが、具体的なものは見つかりませんでした。また、教科書の上記の質問のテキストは明確ではありません。

4
Nikhil

はい、あなたの答えは正しいです。与えられたシーケンスに対して、

111011

奇数パリティは111011であり、パリティビットはゼロであるため、コード内の1の総数は5であり、これは奇数です。

偶数パリティは1110111であり、パリティビットは1であるため、コード内の1の総数は6であり、これは偶数です。

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

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

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)にする必要があります。

1

パリティの代替実装:

これには、整数の特定の数値の連続するビット間で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
0
Raghav