在Matlab中反转一个逻辑位

Aca*_*mia 6 arrays string binary matlab

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

>> X = dec2bin(10)
X = 1010
Run Code Online (Sandbox Code Playgroud)

我这样做了:

x(i) = num2str(1-str2num(x(i)))
Run Code Online (Sandbox Code Playgroud)

And*_*ein 12

如果我理解正确,并且您想将一位设置为1则使用 bitset

bitset( x, bitNumber)
Run Code Online (Sandbox Code Playgroud)

如果你想翻转位从0到1,副verca,使用BITXOR

num = bin2dec('101110');  
bitNum = 1;  
res = bitxor(num, 2^(bitNum-1));
disp(dec2bin(res));
Run Code Online (Sandbox Code Playgroud)

它更好,因为您不需要将数字转换为char.


gno*_*ice 5

如果你想翻转一点数值num而不先将它转换为'0'和的字符数组'1',那么你可以使用像BITXOR,BITGETBITSET这样的函数(正如Andrey所提到的):

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
Run Code Online (Sandbox Code Playgroud)

但是,如果你想要的字符数组进行操作,你也可以做到这一点很奇怪的事情:

X(i) = 'a' - X(i);
%# Or ...
X(i) = 97 - X(i);
Run Code Online (Sandbox Code Playgroud)

此工作,因为该字符 'a'X(i)执行数学运算之前首先被转换为它们的等效的Unicode UTF-16的数值.由于数值为'a'97,因此从中减去'0'(数值48)或'1'(数值49)'a'将导致另一个的数值.然后,在将等式右侧的结果数值放回字符数组中时,将其转换回字符X.