Sé que tiene algo que ver con el complemento de 2 y sumar 1, pero realmente no entiendo cómo puedes codificar un número más con la misma cantidad de bits cuando se trata de números negativos.
Sé que tiene algo que ver con el complemento de 2 y sumar 1, pero realmente no entiendo cómo puedes codificar un número más con la misma cantidad de bits cuando se trata de números negativos.
Respuestas:
Piénsalo en estos términos. Tome un número de 2 bits con un signo anterior:
000 = 0
001 = 1
010 = 2
011 = 3
Ahora tengamos algunos aspectos negativos:
111 = -1
110 = -2
101 = -3
Espera, también tenemos
100 ...
Tiene que ser negativo, porque el bit de signo es 1. Entonces, lógicamente, debe ser -4.
(Editar: como WorldEngineer señala correctamente , no todos los sistemas de numeración funcionan de esta manera, pero los que está preguntando lo hacen).
Porque no hay dos clases de números en el rango entero, sino tres: números negativos, cero y números positivos. El cero debe ocupar un espacio (sería poco práctico no poder representar el cero ...), por lo que la clase positiva o negativa tiene que abandonar un espacio. El hecho de que generalmente sea el rango positivo que tiene que hacer ese sacrificio es hasta cierto punto arbitrario, pero en el nivel de las manipulaciones de bits hay algunas cosas que esta decisión hace más conveniente.
BÁSICAMENTE hay tres formas de representar enteros con signo en binario: complemento de 2, complemento de 1 y magnitud de signo. (Biquinary siguió el camino del Dodo Bird hace mucho tiempo).
El complemento de 1 y la magnitud de signo tienen dos valores cero, +0 y -0, cada uno con una representación única. El complemento de 2 solo tiene un valor cero y una representación.
Ahora, un campo de N bits puede codificar 2 ^ N valores. Resta uno en el complemento de 2, y tienes 2 ^ N-1 = 2 ^ (N-1) + 2 ^ (N-1) + 1. Dado que la representación para cero es todos bits cero, y un signo + es cero, habrá una posible representación distinta de cero con el bit de signo establecido en 1.
Esta es una forma muy larga de decir que el complemento de 2 representa valores en el rango - (2 ^ (N-1)) .. + (2 ^ (N-1) - 1).
El complemento de 1 en realidad tiene una ventaja sobre el complemento de 2 si está haciendo cálculos de procesamiento de señal digital entera. Las operaciones complementarias de 1 se truncan inherentemente hacia cero. El complemento de 2 se trunca hacia el infinito. Aprendí este de la manera DURA ...