Foros del Web » Programando para Internet » Javascript »

Operación lógicas con signos negativos (bit a bit)

Estas en el tema de Operación lógicas con signos negativos (bit a bit) en el foro de Javascript en Foros del Web. Buenas Tardes, Cuándo realizo las siguientes operaciones en una consola de Javascript obtengo esos resultados.... Bit a bit, qué está sucediendo en el primer caso? ...
  #1 (permalink)  
Antiguo 12/09/2012, 11:16
 
Fecha de Ingreso: noviembre-2008
Mensajes: 89
Antigüedad: 16 años, 1 mes
Puntos: 0
Operación lógicas con signos negativos (bit a bit)

Buenas Tardes,


Cuándo realizo las siguientes operaciones en una consola de Javascript obtengo esos resultados....

Bit a bit, qué está sucediendo en el primer caso? En qué afecta el signo negativo en el 73.


Caso 1:
Código:
>>> (-73&255)

183
Caso2:
Código:
>>> (~73&255)

182

Muchas Gracias en lo que me puedan ayudar.
  #2 (permalink)  
Antiguo 12/09/2012, 11:47
Avatar de Dradi7  
Fecha de Ingreso: junio-2008
Ubicación: Peru - Lima
Mensajes: 1.518
Antigüedad: 16 años, 6 meses
Puntos: 220
Respuesta: Operación lógicas con signos negativos (bit a bit)

Se sobreentiende que se esta realizando operaciones bit a bit, en la primera parte del CASO 1 el signo menos influye bastante porque al tratar de convertir 73 a bits es muy diferente que convertir -73 a bits puedes tu mismo realizar la prueba

Código Javascript:
Ver original
  1. var num = 73;
  2. console.log(73.toString(2));
  3. num = -73;
  4. console.log(73.toString(2));

En el otro caso el operador ~ esta realizando el calculo de esta funcion -(x + 1) devolviendo entonces esto

Código Javascript:
Ver original
  1. -74&255

Al realizar el calculo veras que te dara lo mismo

Saludos
__________________
La clave de todo triunfador es eliminar todas sus excusas y sus limitaciones
  #3 (permalink)  
Antiguo 12/09/2012, 11:51
 
Fecha de Ingreso: noviembre-2008
Mensajes: 89
Antigüedad: 16 años, 1 mes
Puntos: 0
Respuesta: Operación lógicas con signos negativos (bit a bit)

Y qué operaciones hace la consola de javascript, para qué de 183 y no de 182 ?
  #4 (permalink)  
Antiguo 12/09/2012, 11:56
Avatar de Dradi7  
Fecha de Ingreso: junio-2008
Ubicación: Peru - Lima
Mensajes: 1.518
Antigüedad: 16 años, 6 meses
Puntos: 220
Respuesta: Operación lógicas con signos negativos (bit a bit)

Cita:
Iniciado por Dradi7 Ver Mensaje
Se sobreentiende que se esta realizando operaciones bit a bit, en la primera parte del CASO 1 el signo menos influye bastante porque al tratar de convertir 73 a bits es muy diferente que convertir -73 a bits puedes tu mismo realizar la prueba

Código Javascript:
Ver original
  1. var num = 73;
  2. console.log(73.toString(2));
  3. num = -73;
  4. console.log(73.toString(2));

En el otro caso el operador ~ esta realizando el calculo de esta funcion -(x + 1) devolviendo entonces esto

Código Javascript:
Ver original
  1. -74&255

Al realizar el calculo veras que te dara lo mismo

Saludos
Pero te acabo de explicar como funciona mira en tu primer ejemplo es así

-73&255

el segundo ejemplo

~73&255 pero como esta con el operador debe realizar este calculo -(x+1) entonces al final te va a quedar

-74&255 la cual es diferente que el CASO 1 entonces por logica se entiende que los resultados son diferentes
__________________
La clave de todo triunfador es eliminar todas sus excusas y sus limitaciones
  #5 (permalink)  
Antiguo 12/09/2012, 12:11
 
Fecha de Ingreso: noviembre-2008
Mensajes: 89
Antigüedad: 16 años, 1 mes
Puntos: 0
Respuesta: Operación lógicas con signos negativos (bit a bit)

Eso si da, como lo explicas....

Cita:
Iniciado por Dradi7 Ver Mensaje

~73&255 pero como esta con el operador debe realizar este calculo -(x+1) entonces al final te va a quedar

Pero esto no da por logica... bit a bit, tiene su razón de ser... (logicamente si tiene que dar diferente, pero exactamente por qué da un número de más, es mi pregunta)

Cita:
Iniciado por Dradi7 Ver Mensaje

-74&255 la cual es diferente que el CASO 1 entonces por logica se entiende que los resultados son diferentes
  #6 (permalink)  
Antiguo 12/09/2012, 12:34
 
Fecha de Ingreso: noviembre-2008
Mensajes: 89
Antigüedad: 16 años, 1 mes
Puntos: 0
Respuesta: Operación lógicas con signos negativos (bit a bit)

Listo... Resuelto. Lo que sucede es lo siguiente... Está representando el numero negativo con completo a 2...


Cita:

FORMA COMPLEMENTO A 2

El complemento a 2 de un numero binario se obtiene tomando el complemento a 1, y sumándole 1 al bit menos significativo. A continuación se ilustra este proceso para el numero 1001 = 9


Complemento a dos
Figura 15: Complemento a 2

Cuando se agrega el bit de signo 1 al MSB, el numero complemento a 2 con signo se convierte en 10111 y es el numero equivalente al - 9.
Extraido de: http://www.ladelec.com/teoria/electr...omplemento-a-2


En conclusión...
>>> ~73 & 255 = 182 Cómo sucede?
Código:
DEC                BIN              
~73        ~ 01001001      (NEGADO)   10110110
255            11111111

Operación &   

1 0 1 1 0 1 1 0
1 1 1 1 1 1 1 1
1 0 1 1 0 1 1 0  =>  (DEC)  182

Y ahora, para que de 183 (Usamos el Complemento a 2, como se explica en http://www.ladelec.com/teoria/electr...omplemento-a-2):


Código:
Convertirmos a binario inicialmente el 73 (positivo)
-73   -->  1001001

   0110110
+        1
 1 0110111    El primer  1 se le agrega, según la teoría... (indica que el número negativo)

   10110111
Entonces -73 & 255

Código:
  10110111 
& 11111111 
  10110111   -->  183    ;)

Fácil......

Última edición por ingeday; 12/09/2012 a las 13:42

Etiquetas: negativos, signos
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 02:08.