Complemento de dos hexadecimales

3

Tengo esta pregunta, que pensé que sabía hacer, pero mi método es incorrecto en alguna parte. Convertí los números a binario, eliminé 1 y luego los invertí para obtenerlos en formato binario normal. Luego agregué 4 0 iniciales para darme un número de 16 bits y luego lo convertí de nuevo en el complemento de dos en hexadecimal, lo que da el Hex FEF7, que es la respuesta correcta. Sin embargo, aplicar el mismo método al segundo número da F7FE, que es incorrecto, ya que la respuesta debería ser 0F7E Hex según el esquema de marca. ¿Puedes decirme a dónde me voy mal?

Gracias

    
pregunta Gurn64

3 respuestas

4

Ignacio mostró el atajo: sign-extension.

Lo que intentaste también está bien, y muestra que intentas entender el proceso: conviértelo en un 'valor simple' y luego vuelve a convertirlo en el complemento de dos. Pero debe recordar que este proceso es diferente para los números negativos y positivos (y 0):

  • para números no negativos (el bit más alto es 0) el valor es simplemente el valor (positivo o 0). No hay necesidad de convertir hacia atrás o adelante.

  • para los números negativos (el bit más alto es 1) puede volver a convertir a un número positivo, agregar los 0 adicionales al frente y luego volver a convertir en negativo.

Usted demostró que puede hacer lo segundo, ahora solo debe recordar que este proceso no tiene sentido para un valor que no es negativo para empezar.

    
respondido por el Wouter van Ooijen
7

Extiendes el MSb a la izquierda, ya que eso determina el signo. El valor no cambiará con el nuevo número de bits.

  • 0xFEF7
  • 0x07FE
respondido por el Ignacio Vazquez-Abrams
2

Te equivocas porque estás utilizando el mismo método para dos situaciones que no son las mismas.
Haga una breve lectura aquí . Cuando un número es positivo, la representación complementaria de sus dos corresponde a su representación binaria "normal", por lo que cuando desea convertir un número (signo más valor absoluto, cualquier base):

  • si es positivo, simplemente convierte su valor absoluto en forma binaria
  • si es negativo, puedes hacer el complemento de dos de su valor absoluto en forma binaria

Cuando quiere volver, las cosas son exactamente iguales: puede indicar el signo mirando el primer bit: si es cero, el número es positivo, si es 1 es negativo. Es por eso que el libro le dice que estos son números de 12 bits, sin esa información, habría sido correcto para sus respuestas.
Entonces, para extender los bits que pasan a través de una representación de magnitud de signo:

  • si el msb es 1, convierta el número como lo hizo, agregue ceros, vuelva al complemento de dos
  • si el msb es 1, convierta el número, es decir, manténgalo tal como está , agregue ceros, vuelva al complemento de dos, es decir, manténgalo como está

Y eso es todo. Como escribe Ignacio, sucede que es suficiente simplemente extender el MSB a la izquierda (puedes probar que partiendo de las fórmulas en wikipedia), pero esa es solo una forma rápida de hacer las cosas y no explica por qué te equivocaste. Guarde sus consejos como una forma de verificar sus cálculos ... Y (en el futuro) como la forma de evitar errores.

    
respondido por el Vladimir Cravero

Lea otras preguntas en las etiquetas