¿Cómo puedo convertir de int a float (devuelve como unsigned, pero interpretado como un flotador)? Yo no puedo usar cualquier lenguaje de alto nivel de las construcciones como los sindicatos, solo bit a bit ops, la lógica de control (si/tiempo), + y -, etc.

  • Es esta una tarea? ¿Qué has intentado hasta ahora?
  • ¿Cómo es construido «float» valor a acceder?
  • Google el IEEE de punto flotante formato estándar, y averiguar cómo juguetear con los bits para establecer su entero en la «fracción» y el valor apropiado en el «exponente».
  • A pesar de los poderes fácticos en el meta son desaprobación de la «tarea» de la etiqueta.
  • Esto es (al menos) la cuarta pregunta en las últimas 48 horas en este tema general. Creo que los otros han float a int y este es de tipo int a float, pero la semejanza de familia es notable. ASÍ que 12342926; ASÍ que 12336675; ASÍ que 12336314.
  • Todos los que pude encontrar fue este hilo, en el que Jeff defiende esta particular de la etiqueta meta. ¿Tiene un vínculo más reciente? Yo, sinceramente, espero que no se como se deja en claro que uno no sólo debe entregar una respuesta completa. Ah, y no sé qué «poderes fácticos» significa 😀
  • Espero no dar mucha información con la respuesta =)
  • Los Poderes fácticos (los poderes fácticos).
  • sí, gracias.
  • Consulte meta.stackexchange.com/q/123758/172880
  • Si sólo desea guardar los bits de distancia, el uso de un union {int i; float f;} a reinterpretar la int como float y viceversa. Tenga cuidado, AFAIR C no es garantía de que son de la misma (algunas arquitecturas de tipo adicional de bits, o hacer otras cosas graciosas aquí).

InformationsquelleAutor Trevor Hill | 2012-09-10

2 Comentarios

  1. 5

    Seguro. Sin duda se puede construir un número de punto flotante de un raw byte del búfer. De precisión simple floats se representan como valores de 32 bits IEEE-754 y puede representar el entero espacio con bastante facilidad. El entrada de la wikipedia en punto flotante de IEEE describe los diferentes formatos. Todo lo que tienes que hacer es averiguar qué bits para establecer o prueba. Mira la página de la wikipedia en precisión simple para una buena descripción de los bits. Aquí empieza:

    float convert_int(unsigned int num) {
        float result;
        unsigned int sign_bit = (num & 0x80000000);
        unsigned int exponent = (num & 0x7F800000) >> 23;
        unsigned int mantissa = (num & /* insert mask value here */);
    
        /* you can take over from here */
    
        return result;
    }

    Me dejaba mucho a la imaginación, pero tengo la sensación de que esta es una tarea problema. Una vez que usted entiende la parte que he escrito, que debería ser bastante fácil de hacer el resto. Una mucho mejor solución es utilizar un union, pero voy a dejar que un ejercicio para el lector así.

    • sí, probablemente debería dejarlos en poco amigable =)
  2. -3

    Si usted no desea utilizar cualquiera o aritméticos operadores bit a bit, a continuación, puede utilizar un método como

     float convrt(int x)
     {
      return x;
     }

    Volverá flotar… puede comprobar en el principal como..

      void main()
     {
       int x=5;
       cout<<"size of x=" << sizeof(x);
       cout<<"size of convrt(x)=" << sizeof(convrt(x));
     }

    se dará la salida como

        size of x=2
        size of convrt(x)=4

    que significa que se convierte en el flotador. 🙂

    • título: «no hay casting». este implícitamente moldes. se dijo explícitamente que quería un bit a bit de la solución.

Dejar respuesta

Please enter your comment!
Please enter your name here