2010-05-28 30 views

Respuesta

16

La mayoría de las computadoras actualmente usan two's complement para enteros con signo, pero puede variar según la arquitectura del hardware, el lenguaje de programación u otros problemas específicos de la plataforma.

Para una representación en complemento a dos, la ("más a la izquierda") bit más significativo se refiere como el bit de signo , y se establecerá para un entero negativo y claro para un número entero no negativo. Sin embargo, es más que solo una "bandera". Consulte el Wikipedia article para obtener más información.

+0

¿Entonces el bit frontal será 1 para negativo y 0 para positivo? ¿Qué hay de 0? – User

+0

Cero se representa por todos los bits siendo cero. –

4

Normalmente es un complemento a dos.

1
0xFFFFFFFF = -1 
0xFFFFFFFE = -2 
0xFFFFFFFD = -3 
... 

& etc.

0

El bit más significativo (el último bit de la izquierda) se establece para los números negativos.

+1

¿Te refieres a "primer bit a la izquierda"? –

+0

¿Qué tal "primer bit DESDE la izquierda" o "Último bit DESDE la derecha"? :) –

3

de la norma C99:

Para los tipos de enteros con signo, los bits de la representación de objeto será divididos en tres grupos: los bits de valor, bits de relleno, y el bit de signo. No es necesario que haya bits de relleno; allí será exactamente un bit de signo. Cada bits que es un poco valor tendrá el mismo valor que el mismo bit en la representación objeto de la tipo sin signo correspondiente (si hay son bits de valor M en el tipo firmado y N en el tipo sin signo, a continuación, M = N). Si el bit de signo es cero, deberá no afectar el valor resultante. Si el bit de signo es uno, el valor se modificado en una de las siguientes maneras:

- el valor correspondiente con el signo es negado bit 0 (signo y magnitud);

- el bit de signo tiene el valor - (2N) (complemento a dos);

- el bit de signo tiene el valor - (2N - 1) (complemento de uno).

Cuál de estos se aplica es definido por la implementación, como es si el valor con bit de signo 1 y todos los bits de valor cero (para los dos primeros), o con bit de signo y todo valor bits 1 (por el complemento de unos), es una representación trap o un valor normal. En el caso de signo y magnitud y complemento de , si esta representación es un valor normal, es llamado cero negativo.

0

Creo que la respuesta es 0110, precedido de 1 repetido 28 veces, por lo tanto, que parece:

1111 1111 1111 1111 1111 1111 1111 0110;

Pasos:

  1. representación de bits de 10 es:

    0000 0000 0000 0000 0000 0000 0000 1010;

  2. 0->1 y 1->0 para todos los bits:

    1111 1111 1111 1111 1111 1111 1111 0101;

  3. Añadir 1 a la última parte, y propagar al poco por delante, hecho!

    1111 1111 1111 1111 1111 1111 1111 0110;

===

Usted puede verificar mediante la adición con 10, y obtendrá 0 para todos los bits. Como se mencionó anteriormente, está basado en 2 y sigue el complemento de dos.

Cuestiones relacionadas