1

我希望有人可以帮助我解决这个特殊问题:

我需要为两个以上的输入计算“bitxor”。我有一个输入/元素的向量,其中输入/元素的数量会有所不同。例如,在一个四元素向量的情况下,解决方案如下:

向量:Y = [1 3 5 7];

解决方案:bitxor(bitxor(Y(1),Y(2)),bitxor(Y(3),Y(4)));

有什么方法可以用更通用的方式编写它,这样无论向量 Y 中有多少输入元素,我都会得到一个值/元素?

4

3 回答 3

1

一个“信封背面”的解决方案似乎是将列表中的每个数字转换为二进制并将1每个位列中 s 的数量相加。

如果特定列号的总和是偶数,那么该列将0在您的最终(二进制)结果中保存 a,如果它是奇数,它将保存 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 回答
0

我现在将描述的解决方案远非最佳,但无论如何您都可以尝试一下:

Y1 = Y(1:2:end);
Y2 = Y(2:2:end);
arrayfun(@(i) bitxor(bitxor(Y1(i),Y2(i)),bitxor(Y1(i),Y2(i))),1:size(Y1,1))
于 2013-04-28T18:43:24.887 回答
0

这是另一种解决方案,但它会覆盖原始向量。

Y = [1, 3, 5, 7];

for i=1:length(Y)-1
    Y(i+1) = bitxor(Y(i),Y(i+1)); 
end
finalVal = Y(end)
于 2018-05-01T03:34:04.960 回答