2012-03-02 6 views

Respuesta

5

El número está firmado para que las matemáticas tengan más sentido. Si resta la dirección 123 de 456, espera obtener la dirección 333, ¿verdad? Entonces, si restas 456 de 123, esperas obtener -333, no 18,446,744,073,709,551,283, ¿verdad? Es por eso que las direcciones están firmadas.

La razón por la que solo se firma la parte alta es que un número solo tiene un bit de signo, y siempre es el bit más alto (más significativo).

+0

'LowPart' y' HighPart' son dos mitades de una dirección de 64 bits. Al tratarlo como un entero con signo de 64 bits, solo hay un bit de signo, y está en la parte alta. En la práctica, solo una pequeña fracción del espacio de direcciones completo de 64 bits (16 exabytes) estará disponible. \ –

+0

La mitad del espacio de direcciones son negativos ... ¿así que se desperdician? ¿Por qué no verificar qué operando es más grande antes de hacer la resta para asegurarse de que el resultado sea positivo? ¿La aritmética es la única razón? – solotim

+0

@solotim: los "negativos" no se desperdician. A la CPU no le importa si el puntero es "negativo"; solo ve que se ha establecido el bit alto. – Gabe

Cuestiones relacionadas