2 del número fraccional negativo

0

He intentado buscarlo en google antes de publicarlo aquí, pero no encontré la forma explicada. Mi pregunta es la siguiente:

¿Cuál es la representación complementaria de 2 de -5/8?

¿Ayudaría incluso si se proporciona una forma de obtener el complemento fraccionario negativo de 2?

Gracias

    
pregunta Manish

1 respuesta

2
El complemento de

2 solo se puede utilizar para representar números enteros.

Sin embargo, una solución, podría usar dos valores de complemento de 2, uno para escalar el otro. Por ejemplo, para representar -5/8 puede tener dos variables, que contienen valores (-5, -8) o para una aritmética más simple, (-5, -3) donde -3 representa el número de desplazamientos de bits.

Otra solución podría ser tener un cambio implícito. Por ejemplo, podría usar un número complementario de 16 bits y 2 para representar valores de -256 a +255. En ese caso, el bit más significativo sería el signo, los 8 bits inferiores serían el número entero y los 7 bits más bajos serían la fracción.

Podrías arreglar esto como quieras. Por ejemplo, podría usar solo 8 bits y tener el siguiente significado de bit:

  • (bit 7) Iniciar sesión
  • (bit 6) 8's
  • (bit 5) 4's
  • (bit 4) 2's
  • (bit 3) 1's
  • (bit 2) mitades
  • (bit 1) trimestres
  • (bit 0) octavos

Esto le daría valores en octavos incrementos, en los siguientes rangos:

Positivo: 0 a 15.875 Negativo: -0.125 a -16

Según el comentario de AndrejaKo, esta es una representación de punto fijo.

Un ejemplo de posibles representaciones utilizando un número binario de 4 bits

Binary | Regular 2's comp. | /16 2's comp    | /8 2's comp
------ | ----------------- | --------------- | ------------

0000     0                   0      (0)        0
0001     1                   0.0625 (1/16)     0.125 (1/8)
0010     2                   0.125  (2/16)     0.25  (2/8)
0011     3                   0.1875 (3/16)     0.325 (3/8)
0100     4                   0.25   (4/16)     0.5   (4/8)
0101     5                   0.3125 (5/16)     0.625 (5/8)
0110     6                   0.325  (6/16)     0.75  (6/8)
0111     7                   0.4375 (7/16)     0.825 (7/8)

1111     -1                  -0.0625 (-1/16)   -0.125 (1/8)
1110     -2                  -0.125  (-2/16)   -0.25  (-2/8)
1101     -3                  -0.1875 (-3/16)   -0.325 (-3/8)
1100     -4                  -0.25   (-4/16)   -0.5   (-4/8)
1011     -5                  -0.3125 (-5/16)   -0.625 (-5/8)
1010     -6                  -0.325  (-6/16)   -0.75  (-6/8)
1001     -7                  -0.4375 (-7/16)   -0.825 (-7/8)
1000     -8                  -0.5    (-8/16)   -1     (-8/8)

Como puedes ver, 1011 representa -5 en el complemento de dos. Entonces, si tiene un cambio de bit implícito de 3, (equivalente a dividir por 8), representa -5/8.

De forma similar, si está utilizando 5 bits, donde tiene una división implícita por 16, el valor del bit sería 10110, donde el 1 al principio denota el signo, y 0110 en el contexto del bit con signo complementario del 2 representa 5 / 8.

Aquí es de donde viene su "0110":

Binary | Reg. 2's comp. | /16 2's comp    
------ | -------------- | --------------- 
11111     -1              -0.0625 (-1/16)
11110     -2              -0.125  (-2/16)
11101     -3              -0.1875 (-3/16)
11100     -4              -0.25   (-4/16)
....
10111     -9              -0.5625 (-9/16)
10110     -10             -0.625  (-10/16) <== where "0110" equals -5/8
10101     -11             -0.6875 (-11/16)
    
respondido por el CL22

Lea otras preguntas en las etiquetas