2011-02-09 10 views
5

Estaba pensando en los rangos de tipos de datos, surge una pregunta. gama de carbón Como sabemos firmado es de -128 a 127. me dieron el cómo viene 127, es decir, 0111111 = +127firmó aritmética de complemento dos

Pero no pude conseguir la forma viene -128? si solo en el signo de bit obtenemos 11111111, ¿cómo es igual a -128?

+0

FWIW, 0111111 = 63. –

Respuesta

0

Los números negativos tienen el bit de signo el valor 1; -128 es el valor con el bit de signo configurado pero no con otros bits (es decir, es el número negativo más pequeño). La representación binaria de -128 es 10000000. Para otras longitudes de datos, el número negativo más pequeño en el complemento a dos es siempre 1000... para la cantidad correcta de ceros.

8

La mayoría de las veces, las computadoras usan lo que se llama complemento 2 para representar enteros con signo.

La manera en que el complemento a 2 funciona es que los valores posibles están en un bucle enorme, de 0, a MAX_VALUE, a MIN_VALUE, a cero, y así sucesivamente.

Por lo tanto, el valor mínimo es el valor máximo +1 - 01111111 = 127 y 10000000 = -128.

Esto tiene la buena propiedad de comportarse exactamente igual que la aritmética sin signo: si quiero hacer -2 + 1, tengo 11111110 + 00000001 = 11111111 = -1, usando el mismo hardware que para la adición sin firmar.

La razón por la que hay un valor adicional en el extremo inferior es que optamos por tener todos los números con el conjunto de bits altos como negativos, lo que significa que 0 toma un valor del lado positivo.

+1

Vale la pena señalar que there * is * una representación donde '11111111' es el número mínimo representable, y es de hecho -127 - esta es la forma de" signo de magnitud ". En magnitud de signo, hay dos ceros: un '+ 0' y un' -0', '00000000' y' 10000000' respectivamente. – caf

+0

@ Asad Hanif, ¿necesitas más ayuda? Si esta u otra respuesta fue útil para usted y respondió su pregunta, no se olvide de aceptar esa respuesta. También vea [¿Qué significa cuando se acepta una respuesta] (https://meta.stackexchange.com/help/accepted-answer)? y [¿Por qué es importante votar] (https://meta.stackexchange.com/help/why-vote)? –

0

Una manera simple de pensar en esto es comenzar en 01111111 y luego seguir restando 1 hasta que se enrolla; el valor anterior es el valor negativo más pequeño. Restar 1 de 00000000 usando la técnica estándar de "préstamo" produce 11111111, que es de hecho la representación binaria para -1. Podemos seguir restando hasta 10000000, que es -128, y restando uno más rendimientos 01111111 de nuevo, envolviendo.