1
のパリティを計算する私は、バイナリ・ワードのパリティを計算し、次のコードを持っている:進ワード
public class Parity1 {
public static short parity(long x) {
short result = 0;
while (x != 0) {
result ^= (x & 1);
x >>>= 1;
}
return result;
}
私は1011年のようなものの奇数を持っている場合は、私が100001000のように1、それ以外を取得します、私は1011年を取るworking.Ifコードがどのように見ていないです、0.Howeverを取得する、と私は、次の取得し、それを渡す:
number:1011
result : 0
result xor (1&1) == 1=>result
x >>>=1 => 0101
----------------------
number:0101
result : 1
result xor (1&1) == 0 => result
x >>>=1 => 0010
----------------------
number :0010
result : 0
result xor (0&1) ==0 => result
x >>>=1 => 0001
------------------------
number :0001
result : 0
result xor (1&1) ==1 => result
x >>>=1 => 0000
------------------------
number :0000
result : 1
result xor (1&1) ==1 => result
while (x!=0) but x(number) is 0
ends with result 0.
Can someone please explain what I am missing?
編集
同じことをするが効率的に行う別の方法があります。しかし、私はあまりにもそれを取得していません。
public static short parity(long x){
short result =0;
while (x!=0){
result ^=1;
x &= (x-1);
}
return result;
}
としてそれを呼び出す私は** ** '得るか1 '** **場合私はパリティ(0b1011)と呼ばれるパリティを呼び出します。どうやって*呼びますか? –
最後の繰り返しを忘れました。あなたはちょうどその数が0000であると突然言いますが、最初は0001です。 – harold
あなたは 'Integer.bitCount(n)&1'を使うこともできます。 – msandiford