Saltar al contenido

¿Cómo saber si el valor hexadecimal es negativo?

Entiende el código bien previamente a adaptarlo a tu proyecto si ttienes algo que aportar puedes compartirlo con nosotros.

Solución:

Lea sobre la representación del complemento a dos: https://en.wikipedia.org/wiki/Two%27s_complement

Creo que la forma más fácil de entender cómo se tratan los números negativos (por lo general) es escribir un pequeño número binario y luego descubrir cómo hacer la resta por uno. Cuando llegue a 0 y aplique ese método una vez más, verá que de repente obtiene todos los 1. Y así es como (generalmente) se representa “-1”: todos unos en binario o todos f en hexadecimal. Comúnmente, si trabaja con números con signo, se representan con el primer bit (el más significativo) siendo uno. Es decir, si trabajas con un número de bits que es múltiplo de cuatro, entonces un número es negativo si el primer dígito hexadecimal es 8,9,A,B,C,D,E o F.

El método para hacer la negación es:

  1. invertir todos los bits
  2. añadir 1

Otro beneficio de esta representación (complemento a dos) es que solo obtiene una representación para cero, lo que no sería el caso si marcara números con signo configurando el MSB o simplemente invirtiéndolos.

Por lo que entiendo, siempre debe mirar el dígito más a la izquierda para saber el signo. Si está en hexadecimal, cualquier valor entre 0 y 7 es positivo y 8-f es negativo. Alternativamente, puede convertir de hexadecimal a binario, y si hay un 1 en el dígito más a la izquierda, entonces el número es negativo.

MALEFICIO <-> BINARIO <-> SEÑAL

0-7 <-> 0000-0111 <-> posición
8-F <-> 1000-1111 <-> negativo

La respuesta aquí en el foro se ve bien:

Cada “dígito” hexadecimal es de 4 bits. La d en la posición de orden superior es 1101. Como puede ver, tiene un bit superior a uno, por lo tanto, el número entero es negativo.

y

Un número hexadecimal siempre es positivo (a menos que específicamente le pongas un signo menos). Puede interpretarse como un número negativo una vez que lo almacena en un tipo de datos en particular. Solo entonces importa el bit más significativo (MSB), pero es el MSB del número “tal como está almacenado en ese tipo de datos”. En ese sentido, las respuestas anteriores son solo parcialmente correctas: solo en el contexto de un tipo de datos real (como un int o un long) importa el MSB.

Si almacena “0xdcafe” en un int, la representación sería “0000 0000 0000 1101 1100 1010 1111 1110” – el MSB es 0. Mientras que la representación de “0xdeadcafe” es “1101 1110 1010 1101 1100 1010 1111 1110” – el MSB es 1.

Comentarios y calificaciones

Te invitamos a favorecer nuestra misión añadiendo un comentario y dejando una puntuación te estamos agradecidos.

¡Haz clic para puntuar esta entrada!
(Votos: 2 Promedio: 5)


Tags : /

Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *