¿Existe una forma mejor de revertir un elemento de X?Invertir un bit lógico en Matlab
>> X = dec2bin(10)
X = 1010
Hice esto:
x(i) = num2str(1-str2num(x(i)))
¿Existe una forma mejor de revertir un elemento de X?Invertir un bit lógico en Matlab
>> X = dec2bin(10)
X = 1010
Hice esto:
x(i) = num2str(1-str2num(x(i)))
Si desea invertir un poco de un valor numérico num
sin convertirlo primero en un array de caracteres de '0'
y '1'
, a continuación, puede utilizar funciones como BITXOR , BITGET, y BITSET (como 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
Sin embargo, si hace quieren operar en el array de caracteres, que también podría hacer esto muy extraño cosa:
X(i) = 'a' - X(i);
%# Or ...
X(i) = 97 - X(i);
Esto funciona porque el characters'a'
y X(i)
se convierte primero en su Unicode UTF-16 equivalente valores numéricos antes de que se realice la operación matemática. Como el valor numérico para 'a'
es 97, entonces '0'
(valor numérico 48) o '1'
(valor numérico 49) restado de 'a'
dará como resultado el valor numérico para el otro. El valor numérico resultante en el lado derecho de la ecuación se convierte de nuevo en un carácter cuando se vuelve a colocar en la matriz de caracteres X
.
Si he entendido bien, y que desea establecer un bit a 1 utilización bitset
bitset(x, bitNumber)
En caso de que quiera dar la vuelta un poco de 0 a 1 y vice verca, utilice BITXOR
num = bin2dec('101110');
bitNum = 1;
res = bitxor(num, 2^(bitNum-1));
disp(dec2bin(res));
es mejor, ya que no es necesario para convertir el número de carbón.
Si bien esto funcionará, en mi humilde opinión no es tan bueno, porque no puede entender el significado. Así que no lo rechazaré, pero aún así creo que deberían considerar la claridad del código. –