Visualizzazione dei risultati da 1 a 6 su 6
  1. #1
    Utente di HTML.it
    Registrato dal
    Aug 2011
    Messaggi
    9

    [c] conversione da intero a floating point

    Salve a tutti,
    volevo chiedere se esiste in c una funzione per convertite un intero a 27bit ( 26 + 1 di segno) in un floating point a 32 bit.
    eventualmente sapete dove posso trovare del materiale per documentarmi sull'argomento?
    grazie a tutti.

  2. #2
    Secondo me la cosa più semplice è convertire questo fantomatico intero a 27 bit ( ma dove l'hai pescato? ) in un normale int (te la dovresti cavare con qualche operazione bitwise), e quindi convertire quest'ultimo in un float con un cast.
    Amaro C++, il gusto pieno dell'undefined behavior.

  3. #3
    Non so se funziona, ma c'è il costrutto cast che dovrebbe servire a questo:

    float n;
    n = (float) nome_variabile_27_bit;

  4. #4
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Non può funzionare perché non esiste una variabile a 27 bit.

    Quindi ne usi una a 32 e i bit in più, se non sono impostati correttamente (per i valori negativi) potrebbero dare problemi.
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  5. #5
    Utente di HTML.it
    Registrato dal
    Feb 2009
    Messaggi
    131
    A me viene in mente un codice del genere..
    In teoria il compilatore dovrebbe aggiustare i bit per i numeri negativi, ma non te lo assicuro.
    codice:
    struct foo
    {
    	signed int x:27;
    	signed int y:5;
    } s;
    
    s = *(foo *)&nome_variabile_27_bit;
    
    float f = (float)(int) s.x;

  6. #6
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Originariamente inviato da XAlbeX ...
    Sì ma a questo punto conviene scrivere

    codice:
    struct foo
    {
       signed int x:27;
    };
    e quindi, ad esempio

    codice:
    int main()
    {
      struct foo v;
      v.x = 0x07FFFFFF;
    
      double f = (double)v.x;
      printf("%f\n", f);
    
      return 0;
    }
    Quello che raccomando vivamente è di utilizzare i double e non i float ...
    No MP tecnici (non rispondo nemmeno!), usa il forum.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.