2012-01-10 13 views

Respuesta

5

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.

+1

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. –

12

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.