none
Convertir IEEE 754(Coma flotante) a decimal RRS feed

  • Pregunta

  • Hola buenos dias, me podrian apoyar con algo en lo que estoy atorado, estoy estudiando ing mecatronica por lo tanto no me enseñan tanto este tipo de temas. 

    en un programa en visual basic en un text box tengo que insertar un valor en coma flotante de 32bits (IEEE 754), al oprimir un boton tengo que mostrar el valor en decimal, ya sea en un label o un text box.

    ejemplo: 

    coloco el valor: 00111111100000000000000000000000 

    al oprimir el boton tendria que aparecer en un label : 1

    que representa el mismo valor colocado pero en decimal.

    he investigado un poco, sé que el primer digito indica si el numero es positivo o negativo, los siguientes 9 digitos indican el exponente y los 23 restantes, el valor significativo. 

    No entiendo como poder hacer la logica para desarrollar este programa ojala me puedan ayudar o almenos ubicarme un poco gracias

    martes, 3 de julio de 2018 15:24

Respuestas

  • El bit más alto es el signo

    Cuando el bit está encendido es negativo. Sino es positivo. Si lo integras a una fórmula aritmética sería (-1) ^ s, donde s es 0 ó 1.

    Los siguientes 8 bits son el exponente. Hay dos casos especiales cuando sus valores son todos 0 o todos 1. En los casos restantes, le restas 127. En ente caso,

    tus 8 bits representan el valor 127, menos 127 es 0. El resultado 0 es el exponente de 2 y es además el número de bits afectados a la representación de la parte entera en la mantisa.

    Hasta ahora tenemos (-1) ^ 0 * 2 ^ 0  =  1

    los 23 bits restantes son la parte fraccionaria  0 / (2 ^23)  = 0.0

    Por ejemplo, 10.5

    0100 0001 0010 1000 0000 0000 0000 0000

    0 -> signo positivo

    10000010 -> 130 - 127 = 3, el exponente es 3

    010 -> 2, 3 bits en la parte fraccionaria para los enteros

    1000 0000 0000 0000 0000 -> 2 ^ 19 / 2 ^ 20 = 0.5

    ((-1) ^ 0) * (2 ^ 3) +  2 + 0.5  --> 1 * 8 + 2 + 0.5 = 10.5

    Public Class Form1
        Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
            Dim valor As Integer = AscW(TextBox1.Text(0)) - AscW("0"c)
            For Each c As Char In TextBox1.Text.Skip(1)
                valor <<= 1
                valor = valor Or AscW(c) - AscW("0"c)
            Next
    
            Dim s As Single = BitConverter.ToSingle(BitConverter.GetBytes(valor), 0)
            Label1.Text = s.ToString()
        End Sub
    End Class
    

    ---

    Nada. Ok, perfecto. Suerte con lo suyo ingeniero.

    martes, 3 de julio de 2018 16:09

Todas las respuestas

  • El bit más alto es el signo

    Cuando el bit está encendido es negativo. Sino es positivo. Si lo integras a una fórmula aritmética sería (-1) ^ s, donde s es 0 ó 1.

    Los siguientes 8 bits son el exponente. Hay dos casos especiales cuando sus valores son todos 0 o todos 1. En los casos restantes, le restas 127. En ente caso,

    tus 8 bits representan el valor 127, menos 127 es 0. El resultado 0 es el exponente de 2 y es además el número de bits afectados a la representación de la parte entera en la mantisa.

    Hasta ahora tenemos (-1) ^ 0 * 2 ^ 0  =  1

    los 23 bits restantes son la parte fraccionaria  0 / (2 ^23)  = 0.0

    Por ejemplo, 10.5

    0100 0001 0010 1000 0000 0000 0000 0000

    0 -> signo positivo

    10000010 -> 130 - 127 = 3, el exponente es 3

    010 -> 2, 3 bits en la parte fraccionaria para los enteros

    1000 0000 0000 0000 0000 -> 2 ^ 19 / 2 ^ 20 = 0.5

    ((-1) ^ 0) * (2 ^ 3) +  2 + 0.5  --> 1 * 8 + 2 + 0.5 = 10.5

    Public Class Form1
        Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
            Dim valor As Integer = AscW(TextBox1.Text(0)) - AscW("0"c)
            For Each c As Char In TextBox1.Text.Skip(1)
                valor <<= 1
                valor = valor Or AscW(c) - AscW("0"c)
            Next
    
            Dim s As Single = BitConverter.ToSingle(BitConverter.GetBytes(valor), 0)
            Label1.Text = s.ToString()
        End Sub
    End Class
    

    ---

    Nada. Ok, perfecto. Suerte con lo suyo ingeniero.

    martes, 3 de julio de 2018 16:09
  • Muchas Gracias, es lo que estaba buscando, no se como agradecerle me la pase semanas tratando descubrir como, Gracias. Espero en algun moento porle ayudar como usted lo hizo gracias.
    martes, 3 de julio de 2018 22:12