Ver Mensaje Individual
  #5 (permalink)  
Antiguo 25/08/2014, 01:18
Fw190
 
Fecha de Ingreso: junio-2010
Ubicación: Madrid
Mensajes: 620
Antigüedad: 14 años, 6 meses
Puntos: 73
Respuesta: Desplazamiento a nivel de bits

Si se trata de números enteros con signo, la cosa es sencilla: El bit más significativo es el de signo. Si el bit está a 0, el número es positivo, y su valor será el correspondiente a esa secuencia de bits. Si el bit más significativo está a 1, el número es negativo, se hace el complemento a 2 y se cambia de signo. Por ejemplo: (me ciño a 8 bits, pero es aplicable a cualquier número de bits):

0000 0011 = +3
1111 1101 = -3

0000 0001 = +1
1111 1111 = -1

0011 1001 = +57
1100 0111 = -57

Como puedes comprobar, cada número es el complemento a 2 de su correspondiente con el signo cambiado. La operación hay que hacerla con el total de bits correspondiente al tamaño del entero. Por ejemplo, -1 en 32 bits sería 11111111 11111111 11111111 11111111, y -3 = 11111111 11111111 11111111 1111 1101.

En cambio, si se trabaja con enteros sin signo, ya tendríamos (sigo poniendo los ejemplos sobre 8 bits):

1111 1111 = 255 (y no -1)
1111 1101 = 253 (y no -3)
1100 0111 = 199 (y no -57)