2012-01-10 97 views

回答

5

如果你想翻轉位數值num的不首先將其轉換成的'0''1'字符數組,那麼你可以使用功能,如BITXORBITGETBITSET(如Andrey also mentions):

num = bitxor(num, 4); %# Flip the bit in the 4's place (i.e. bit 3) 
%# Or ... 
num = bitset(num, 3, ~bitget(num, 3)); %# Flip bit 3 

然而,如果你想要的字符數組進行操作,你也可以做到這一點很奇怪的事情:

X(i) = 'a' - X(i); 
%# Or ... 
X(i) = 97 - X(i); 

這工作,因爲characters'a'X(i)首先被轉換爲等效的Unicode UTF-16在執行數學運算之前的數值。由於'a'的數值爲97,因此從'a'中扣除的'0'(數值爲48)或'1'(數值爲49)將導致其他值的數值。等式右側的結果數字值在放回到字符數組X中時將轉換回字符。

+1

雖然這會起作用,恕我直言,它不是很好,因爲你不明白的意思。所以我不會低估它,但我認爲你應該考慮清晰的代碼。 – 2012-01-10 19:24:07

12

如果我理解正確的話,你要設置一個位爲1的使用位集

bitset(x, bitNumber) 

如果你想翻轉位從0到1,副verca,使用BITXOR

num = bin2dec('101110'); 
bitNum = 1; 
res = bitxor(num, 2^(bitNum-1)); 
disp(dec2bin(res)); 

這是更好,因爲你並不需要將數字轉換爲焦炭