2016-11-04 904 views
0

我試過用數字,它似乎產生兩個數字的總和的絕對值或差異的絕對值。但我無法弄清楚一個通用規則。我閱讀了Mathworks上的描述,但沒有任何幫助。以下是一些示例:MATLAB的bitxor函數是做什麼的?

>> bitxor(1,1:10) 
ans =  
    0  3  2  5  4  7  6  9  8 11 

>> bitxor(2,1:10) 
ans = 
    3  0  1  6  7  4  5 10 11  8 

>> bitxor(3,1:10) 
ans = 
    2  1  0  7  6  5  4 11 10  9 

>> bitxor(4,1:10) 
ans = 
    5  6  7  0  1  2  3 12 13 14 
+0

你能分享一些例子嗎?我猜測它會對數字位執行XOR操作(只有我認爲是整數)。 –

+0

嘗試谷歌...它在2個數字之間做一個按位xor例如0110 xor 1011 = 1101.(以二進制表示法) –

+0

是一個xor就像一個「總和」? – mathemagician

回答

1

如果以二進制格式表示整數,可能會更容易看出bitxor的作用。然後對於每個位的位置,如果兩個數字都不同,則xor操作返回1,如果它們相同則返回0。爲了演示,我們將使用以下(醜陋)binarize函數,該函數接受一個整數數組並返回每個整數的二進制(4位,準確地說)字符串表示形式,並將它們格式化爲水平字符串'數組',每個4位字符串之間有空格。這將使我們能夠在視覺上比較兩個4位輸入和它們的異或輸出。

binarize = @(x) reshape([dec2bin(x,4)'; repmat(' ',1,size(dec2bin(x)',2))],1,[]); 

然後

>> [binarize(1:10);    % first input : integers from 1 to 10 
    binarize(ones(1,10));   % second input: an array of ten '1's. 
    binarize(bitxor(1, 1:10))]  % the xor operation between the two 

ans = 

0001 0010 0011 0100 0101 0110 0111 1000 1001 1010 
0001 0001 0001 0001 0001 0001 0001 0001 0001 0001 
0000 0011 0010 0101 0100 0111 0110 1001 1000 1011 

確認對於較低行中的每個位,則有一個1,如果兩個數字它上面是不同的,否則爲0;並且最後一行對應於您的示例中的整數[0,3,2,5,4,7,6,9,8,11]的4位表示形式。

相關問題