1

I hope someone can help me with this particular problem:

I need to calculate 'bitxor' for more than two inputs. I have a vector of intputs/elements where the number of inputs/elements varies. For instance, in case of a four elements Vector, the solution is as follows:

Vector: Y = [1 3 5 7];

Solution: bitxor(bitxor(Y(1),Y(2)),bitxor(Y(3),Y(4)));

Is there any way where I can write this in a more general way, such that I get one value/elemet no matter how many inputs elements there is in vector Y?

4

3 に答える 3

1

1「封筒の裏側」の解決策は、リスト内の各数値をバイナリに変換し、各ビット列の sの数を合計することのようです。

特定の列番号の合計が偶数の場合、その列は0最終 (バイナリ) 結果に a を保持し、奇数の場合は を保持し1ます。

だからあなたの例bitxor([1 3 5 7])

0001 (dec 1)
0011 (dec 3)
0101 (dec 5)
0111 (dec 7)
====

ビット単位の合計: 0224 (ここでは基数 2 ではありません、明らかに)

上記の偶数/奇数ルールで変換:

0224 => bin 0000 (or dec 0)

いくつかの簡単な例で試してみましたが、例外は発生しませんでした。

したがって、ソリューションを試すためのいくつかのコード:

Y = [1, 3, 5, 7];
strMat = dec2bin(Y); % Convert Y to char matrix of binary values

for i = 1:size(strMat,2)
    colSum = sum( str2num(strMat(:,i))); % Sum up each column
    finalVal(i) = num2str( mod(colSum,2)); % Check whether column sum is even
end

finalVal = bin2dec(finalVal); % Convert solution to decimal
于 2013-04-28T19:28:22.433 に答える