2013-04-28 38 views
0

我希望有人可以幫助我解決這個問題:Matlab:如何使用'bitxor'獲取比2更多的輸入?

我需要爲兩個以上的輸入計算'bitxor'。我有一個intputs /元素的向量,其中輸入/元素的數量會發生變化。舉例來說,在四種元素矢量的情況下,解決方案如下:

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

解決方法:bitxor(bitxor(Y(1),Y(2)),bitxor(Y(3),Y(4)));

有什麼辦法,我可以在一個更一般的方式寫這篇文章,這樣無論向量Y中有多少輸入元素,我都可以得到一個值/元素?

+1

首先定義了運營商與 – 2013-04-28 18:29:38

回答

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)) 
+0

非常感謝您的幫助N個元素一般陣列。我用另一種方法雖然.. – Jesper 2013-04-29 09:03:29

+0

@ user2329754:沒關係,我不介意,由你選擇你最喜歡的解決方案:) – fpe 2013-04-29 09:08:46

1

A'信封背面的解決方案似乎是每一個數字轉換列表以二進制和總結每個位列中的1的數量。

如果特定列數中的總和爲偶數,那麼該列將在您的最終(二元)結果中保存0,如果它是奇數,則它將保存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 
+0

Ryan J. Smith - 謝謝!你救了我的早晨。它看起來像適用於所有可能的情況。 – Jesper 2013-04-29 09:02:39