它是否有更好的方法来反转X的元素?
>> X = dec2bin(10)
X = 1010
我这样做了:
x(i) = num2str(1-str2num(x(i)))
答案 0 :(得分:12)
如果我理解正确,并且您想将一位设置为1,请使用 bitset
bitset( x, bitNumber)
如果你想从0翻转到1和副verca,请使用 bitxor
num = bin2dec('101110');
bitNum = 1;
res = bitxor(num, 2^(bitNum-1));
disp(dec2bin(res));
最好,因为您无需将数字转换为 char 。
答案 1 :(得分:5)
如果您想翻转一些数值num
而不先将其转换为'0'
和'1'
的字符数组,那么您可以使用{{3}这样的函数},BITXOR和BITGET(作为BITSET):
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);
这是有效的,因为Andrey also mentions 'a'
和X(i)
在执行数学运算之前首先转换为等效的Unicode UTF-16数值。由于'a'
的数值为97,因此从'0'
中减去'1'
(数值48)或'a'
(数值49)将导致数值另一个。然后,等式右边的结果数值会在放回字符数组X
时转换回字符。