Gama de tipos de datos firmados y sin firmar

Gama de tipos de datos firmados y sin firmar

Entonces, si chares 1 byteasí, son 8 bits, ¿verdad?

Entonces, ¿2 ^ 8 = 256 y 0 a 255 es el rango de caracteres?

¿Cómo funciona esto con entradas firmadas y sin firmar? Un int tiene 4 bytes, es decir, 32 bits, entonces 2 ^ 32. 2 ^ 31 - 1 te da el rango positivo de entradas con signo, entonces, ¿qué sucede con el bit 32? ¿Se utiliza para el letrero? ¿Cómo se almacenaría una señal en la memoria?

Respuesta1

Si el tipo de datos se define como un tipo con signo, existen diferentes tipos de representación, principalmente la representación de magnitud con signo y la representación en complemento a dos.

Para la representación de magnitud con signo, sí, el bit de signo se almacenó como el bit más significativo (MSB, es decir, el bit más a la izquierda). MSB de 0 representa una cifra positiva mientras que 1 representa una cifra negativa. Ejemplo:

 7 = 00000111
-7 = 10000111

Esto es simple y (relativamente) legible por humanos; sin embargo, los tipos de números enteros generalmente sonnomantenido de esta manera por dos problemas:

(1) Hay dos representaciones para cero, +0 y -0. Resulta complicado comparar cifras, ya que crea un caso especial.

(2) No es fácil hacer cálculos (tan simples como sumar y restar). Sumar dos números positivos, un número positivo con un número negativo, un número negativo con un número positivo y sumar dos números negativos son cuatro casos de uso diferentes. por ejemplo, 7+6 es sencillo

          1   Carry bit
 7 = 00000111
 6 = 00000110  (Logic for add)
..   ........
13 = 00001101

Mientras que calcular 7+(-6) significa que se utilizará la lógica de resta en su lugar

 7 = 00000111
-6 = 10000110  (Logic for subtraction)
..   ........
 1 = 00000001

Por lo tanto, el rango para un número de 8 bits es -(2^7)+1 a 2^7-1 (es decir, -127 a +127, con dos ceros +0 y -0). La representación de magnitud con signo se utiliza principalmente para mantener números flotantes.

Y eso lleva a la representación en complemento a dos. Los números positivos se representan de la misma manera que la representación de magnitud con signo. Cambiar el bit de signo requiere dos pasos: (1) Invertir todos los bits (cambiar todos los 0 a 1 y 1 a 0) (2) Agregar uno.

Ejemplo, para obtener la representación de -6 seguimos los siguientes pasos

 6 = 00000110
 Invert all bits:  11111001
 Add one: 11111010

Entonces -6 se representa como 11111010. Con la representación en complemento a dos, aún puede leer el signo del MSB; mientras que para el cero sólo existe una representación: 00000000.

También es fácil hacer cálculos con números binarios en representación en complemento a dos: sumar es sumar. Veamos nuevamente cómo funciona calcular 7+(-6):

     1111111   Carry bit
 7 = 00000111
-6 = 11111010  (Logic for add)
..   ........
 1 = 00000001

Por lo tanto, el rango para un número de 8 bits es -(2^7) a 2^7-1 (es decir, -128 a +127). Tenga en cuenta que el rango es diferente de la representación de magnitud con signo.

información relacionada