Ver Mensaje Individual
  #8 (permalink)  
Antiguo 11/08/2011, 23:42
IXtremeLT
 
Fecha de Ingreso: julio-2011
Ubicación: Zapopan, Jal. MX
Mensajes: 316
Antigüedad: 12 años, 10 meses
Puntos: 32
Respuesta: Duda del Operador NOT(~) a Nivel Bit(bitwise)

Gracias papino, en realidad seguía con la duda pero tu ejemplo me hizo hacer pruebas con la consola web y logré entenderlo.

Yo logré aplicar el complemento a dos(Cn2) haciendolo así:
Se invierten los bit (0=1,1=0) después del primer 1 de derecha a izquierda.
Ej.
10110 = 01010

Se toma en cuenta que cuando el número está en negativo(en el caso de JS) quiere decir que está complementado a dos y para revertirlo se vuelve a aplicar el complemento a dos de la mísma forma.
Ej.
-16 en bin es 10000, entonces se revierte usando Cn2, que es igual a 10000, es notable que no se modificó nada porque el primer 1 estaba hasta la izquierda. Y así ya está listo para negarlo normalmente, que sería 01111 que en decimal es 15.

Los pasos para los números positivos es:
Cita:
1. Convertir a binario normalmente.
2. Aplicar la negación normalmente.
3. Aplicar el complemento a dos (negar désde el primer 1 de der. a izq).
4. Convertir a valor décimal con signo negativo.
Los pasos para los números negativos es:
Cita:
1. Convertir a binario normalmente.
2. Aplicar el complemento a dos (negar désde el primer 1 de der. a izq).
3. Aplicar la negación normalmente.
4. Convertir a valor décimal con signo positivo.
Otros ejemplos.
Ejemplo con número positivo:
~23 = ~10111(paso 1) = 01000(paso 2) = 11000(paso 3) = -24 (paso 4)

Ejemplo con número negativo:
~-18 = ~10010(paso 1) = 01110(paso 2) = 10001(paso 3) = 17(paso 4)

Bueno espero que le sirva a alguien más que tenga la mísma duda. Saludos.

Última edición por IXtremeLT; 12/08/2011 a las 00:04