Posterior a observar en diversos repositorios y páginas webs al terminar encontramos la respuesta que te mostramos ahora.
Solución:
Estás confundido porque olvidaste que debe haber algo que distinga los números positivos de los negativos.
Digamos que desea almacenar números no negativos en 8 bits.
00000000
es 0,00000001
es 1,00000010
es 2,00000011
es 3,00000100
es 4,- …
11111111
es 255
Entonces puede almacenar números en el rango 0-255 en 8 bits. 255 = 28 – 1. (2 es la base del sistema binario, 8 es el número de bits, 1 se resta porque queremos contar 0)
Ahora, supongamos que también desea almacenar números negativos. ¿Cómo podemos lograr eso? Podemos dedicar un bit para firmar. Si este bit es 0
luego interpretamos otros 7 bits como un número positivo, de lo contrario, como un número negativo. Es mejor usar el bit más significativo para el signo porque facilita algunas operaciones.
-
Enfoque trivial: Simplemente lea un número tal cual:
00000001
== 1 y10000001
== -101000010
== 66 y11000010
== -6601111111
== 127 y11111111
== -127
-
Complemento de unos: Para cualquier número
x
negar su representación binaria produce una representación binaria de-x
. Esto significa que:00000001
== 1 y11111110
== -101000010
== 66 y10111101
== -6601111111
== 127 y10000000
== -127
-
complemento a dos: Para cualquier número
x
negando su representación binaria y sumando 1 se obtiene una representación binaria de-x
. Esto significa que:00000001
== 1 y11111111
== -101000010
== 66 y10111110
== -6601111111
== 127 y1000001
== -12710000000
== -128
¿Por qué el complemento a dos es el mejor?
- Porque tiene el rango más amplio: -128…127, mientras que el enfoque trivial y el complemento de uno tienen -127…127
- El cero está bien definido:
- Solo en complemento a dos
00000000
es cero - En un enfoque trivial tanto
00000000
y10000000
son cero - En complemento de uno ambos
00000000
y11111111
son cero
- Solo en complemento a dos
- La suma y la resta son idénticas a los números sin signo, por lo que la CPU no necesita instrucciones adicionales para sumar números con signo.
Tenga en cuenta que si dedicamos el bit más significativo para el bit de signo, entonces no podemos convertir el número a binario sin saber cuántos bits necesitaremos. Por ejemplo, si tenemos 4 bits, entonces el número -5 en un enfoque trivial es 1101
en 7 bits sería 1000101
. 0001101
(4 bits -5 rellenado con ceros a una longitud de 7 bits) es en realidad 13 (el bit más significativo es 0, por lo que es positivo).
No haré la tarea por ti, pero puedo darte consejos generales:
Para convertir -x
para N
Representación en complemento a dos de bits largos:
- Convertir
-x
a binario usando complemento a dos. - Rellene a la izquierda con ceros hasta
N-1
largo. - Agregue el bit de signo negativo en el lado izquierdo.
Creo que puedes averiguar el resto de esta respuesta. Si tienes más preguntas, deja un comentario.