Bit de signo

En informática, un bit de signo o bit de signo ( inglés  sign bit ) es un bit que denota el signo de un número [1] . Solo los tipos numéricos con signo tienen un bit de signo , está invariablemente en la posición del bit más significativo , en ciertos contextos el término "bit de signo" se usa en el sentido de "bit más significativo". Normalmente, si el bit de signo es 0, el número no es negativo (positivo o cero), y si el bit de signo es 1, el número es negativo [1] . Esta notación de signo de número es seguida por los códigos de números directos ( ing.  sign-and-magnitude ), inversos ( ing.  complemento a uno ) y adicionales ( ing.  complemento a dos ), más comunes en informática .

En los esquemas de procesamiento de números de punto flotante , a diferencia de los esquemas de punto fijo, se necesitan dos bits de signo durante la representación de números: uno para representar el signo de la mantisa y el otro para representar el signo de la orden. Si se utiliza un código inverso y complementario modificado, el signo del número también se muestra como un código de dos dígitos "00", en el caso de números no negativos, y como el código "11" - en el caso de negativos numeros _ Esto permite determinar fácilmente la situación en la que la cuadrícula de bits de la máquina se ha desbordado (un signo de desbordamiento es la presencia del código "01" o el código "10" en el bit de signo).

Durante la ejecución de operaciones de suma ( resta ), el signo del resultado se obtiene automáticamente, ya que no están involucrados en la operación los números en sí, sino sus códigos (incluido el código de signo). Durante las operaciones de multiplicación ( división ), el signo del resultado se determina sumando los códigos del bit de signo del multiplicando y el multiplicador ( dividendo y divisor ) mod 2.

Rango de representación de números con signo

Dado que el dígito más significativo del número es responsable del signo, solo se pueden usar n-1 dígitos como dígitos digitales del número [2] . Por lo tanto, los números de un byte con signo tienen solo 7 bits digitales, los números de dos bytes tienen, respectivamente, 15 bits digitales, etc. En los códigos directo e inverso, el rango de representación de los números es simétrico alrededor de cero, es decir, el número de números negativos es igual al número de números positivos. Por ejemplo, los códigos hacia adelante y hacia atrás de un byte pueden representar números en el rango -127 ... + 127. En estos códigos, tiene lugar el llamado " cero con signo" , es decir, diferentes representaciones para números "más cero" y "menos cero", el último de los cuales no corresponde al concepto matemático de un número negativo. En el código complemento a dos, el cero tiene un solo código, por lo que el rango de representación de los números no es simétrico con respecto al cero. Entonces, un complemento a dos de un byte representa números en el rango -128 ... + 127.

Cambiar el signo de un número en diferentes códigos

En el código directo , el bit de signo denota el signo del número y los bits de dígito contienen los dígitos binarios del número. Para cambiar el signo de un número en un código directo, basta con cambiar sólo el bit de signo.

+58 = 00111010 -58 = 10111010

En el código inverso , el bit de signo denota el signo del número, y los bits de dígito contienen los dígitos del número para números positivos y el inverso de los dígitos para números negativos. Para cambiar el signo de un número, debe invertir todos los bits del número.

+58 = 00111010 -58 = 11000101

En el código de complemento a dos , el bit de signo indica el signo del número, los bits digitales de un número positivo contienen los dígitos del número y un número negativo es el complemento de 2 n , donde n es el número de dígitos. En la práctica, para obtener un código adicional, los números suman 1 al código inverso. Para cambiar el signo de un número complemento a dos, debe invertir todos los bits del número y agregar 1.

+58 = 00111010 11000101 +1 -58 = 11000110

Los números de coma flotante , como el formato IEEE , el formato IBM , el formato VAX e incluso el formato utilizado en las máquinas Zuse Z1 y Z3 , utilizan representaciones de números de código directo. Para cambiar el signo de un número, simplemente cambie el bit de signo.

Extensión de signo

Si es necesario convertir un número de complemento a dos a un formato más amplio sin cambiar su valor numérico (por ejemplo, de uno a dos bytes), entonces los bits de orden superior adicionales deben llenarse con una copia del bit de signo, un proceso llamada extensión de signo [3] o propagación de signo. Por ejemplo, un número binario positivo de un byte 00111010 extendido a dos bytes se escribe en complemento a dos como 00000000.00111010, y un número negativo 11000110 como 11111111.11000110.

Los procesadores de la familia x86 tienen comandos especiales de extensión de signo CBW (Convertir byte a palabra), CWD y CWDE (Convertir palabra a palabra doble), CDQ (Convertir palabra doble a palabra cuádruple) y un comando universal MOVSX (Mover con extensión de signo) diseñado para automáticamente aumentar el formato de número.

Véase también

Notas

  1. 1 2 Kovalyuk TV Fundamentos de la programación. – 2005.
  2. David Taroff. Fundamentos de Organización y Diseño de Computadores. – 2011.
  3. Rodolfo Marek. Ensamblador con ejemplos. - 2005. - C. 46.

Fuentes