在Matlab中反转一个逻辑位

时间:2012-01-10 19:00:39

标签: arrays string matlab binary

它是否有更好的方法来反转X的元素?

>> X = dec2bin(10)
X = 1010

我这样做了:

x(i) = num2str(1-str2num(x(i)))

2 个答案:

答案 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}这样的函数},BITXORBITGET(作为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时转换回字符。