Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 14

Discussione: Numero reale 32 bit

  1. #1

    Numero reale 32 bit

    Salve,

    un saluto a tutto il forum!

    La mia potrebbe essere una domanda banale ma è la prima volta che mi trovo di fronte a questo problema.

    Ho un dispositivo, la faccio breve altrimenti potrei starne a parlare per ore, che mi comunica un numero reale 32 bit (diviso su due indirizzi da 16 bit), devo convertire questo valore in decimale.

    Esempio pratico:
    Primo indirizzo: 18242
    Secondo indirizzo: 0

    C'è una funzione PHP che effettui questa conversione oppure bisogna che faccio la conversione in binario e poi analizzo il tutto (segno, mantissa ed esponente) e trovo il mio decimale?

    Scusate se non mi sono ben spiegato ma è un po' di tempo che sto cercando e non trovo nulla di specifico... ma magari non è la mia giornata!

    Grazie in anticipo!

  2. #2
    Moderatore di PHP L'avatar di Alhazred
    Registrato dal
    Oct 2003
    Messaggi
    12,501
    No, non ho capito.
    Questo numero reale che ricevi non è già in binario? Perché parli di convertirlo prima in binario?

    Ad ogni modo, per convertire da binario a decimale c'è la funzione bindec()

  3. #3
    No, non ho il binario.

    Io ricevo due interi dal dispositivo, solitamente molto simili a quelli che ho scritto prima:

    18242 e 0

    quindi convertiti in binario:

    0 10001100 00100110000000000000000

    segno = 0
    esponente = 10001100
    mantissa = 00100110000000000000000


    Convertendo questo numero in decimale ho 9408.0 che è quello che voglio ottenere...
    Io vorrei evitare di scrivermi un algoritmo che fa una simile conversione in quanto secondo me c'è già... tutto qui

  4. #4
    Moderatore di PHP L'avatar di Alhazred
    Registrato dal
    Oct 2003
    Messaggi
    12,501
    Si, ma tu hai detto che 18242 e 0 sono due indirizzi di memoria, e che a quegli indirizzi lì trovi il tuo numero diviso in due, quindi dovresti prendere 16 bit da uno, 16 bit dall'altro e metterli assieme per avere il tuo numero.
    Questo numero in che formato è memorizzato? Binario, ottale, esadecimale... ?

    In alternativa non ho capito niente sulla situazione e su cosa devi convertire.

  5. #5
    Scusa, la colpa è la mia che l'ho presa troppo alla larga.
    Considera che ho il binario:
    01000110000100110000000000000000
    Che poi non è altro al fusione di quei due numeri.

    Da quel binario dovrei avere al conversione in decimale.

  6. #6
    Moderatore di PHP L'avatar di Alhazred
    Registrato dal
    Oct 2003
    Messaggi
    12,501
    E la funzione bindec() che ti ho indicato non lo fa?

  7. #7
    se applico la funzione bindec a quel binario ricevo, giustamente, la conversione secca del numero...

    praticamente la soluzione a tutto è una funzione che applichi questo algoritmo:

    (-1)^S * 2^E * M

    dove S è il segno, E è l'esponente e M è la mantissa...

    Mis a che devo farla... vabbè... ci ho provato!

  8. #8
    ma a te arrivano 2 numeri separati?

    l'importante è che sono prima e seconda parte ... in caso ...

    $totale = $primoNumero << 16 + $secondoNumero;

    (dipende se te li manda in big endian o little endian potrebbe essere necessario invertire le parti, ovvero fai $secondoNumero << 16 + $primoNumero)

  9. #9
    Aspettate, vi state fossilizzando sul fatto che il mio problema siano le operazioni tra i bit...

    Tralasciamo il fatto che i due dati me li da un dispositivo e come mi vengono dati perché a trattarli non ho problemi, il problema è questo qui:

    Ho un numero reale a 32 bit in binario... notazione IEEE 754 numero a singola precisione e devo convertirlo in decimale.

    C'è una qualche funzione php che fa questo?

  10. #10
    una funzione che converte un binario in un float (single) in php (nelle librerie di default) non c'è, non esiste

    da wikipedia, guardando, vedo che l'implementazione comunque è veramente semplice
    http://it.wikipedia.org/wiki/IEEE_75...a_.2832_bit.29

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.