Conversioni da float a unsigned short

di Anonimizzato28093 il
11 risposte
Buonasera a tutti, stavo effettuando delle prove per capire le conversioni che i compilatori fanno implicitamente.

volevo convertire float z = -20010.1415 in tipo unsigned short.
Nel farlo senza compilatore il mio ragionamento è stato: elimino la parte dopo la virgola perchè lavoro con gli interi e visto che il tipo unsigned short non ammette un valore negativo aggiungo al valore negativo (-20010) il più grande valore rappresentabile in unsigned short aumentato di 1 che dovrebbe essere 65535. RISULTATO = 45526
Ma il compilatore mi riporta 0 come risultato, potete aiutarmi?

11 Risposte

  • Fai vedere il codice che hai fatto
  • int main (void){
    float x = 4e10, y  = 32767.8, z = -20010.1415;
    short a, b, c;
    unsigned short d;
    a = y;
    b = z;
    c = x;
    d = z;
    
    
    }

    Volevo cercare di comprendere le conversioni implicite che effettua il C
  • No, come fai a vedere che è 0? E' 45526
  • Anche a me torna 45526 ma se metto il codice su compilatore c (clang) mi torna 0. Per la C=x anche mi torna 0 e non riesco a capirne il motivo
  • Non ci siamo capiti ... compilando ed eseguendo il risultato è 45526. Tu come controlli da programma che è 0? Nel tuo codice manca un printf ...
  • Con una printf("%d",d)
  • Ok, ma questa restituisce il valore 45526 ...

    Se non è così per te, mostra TUTTO il codice compresa la printf che non vedo nel tuo e magari indica quale compilatore hai usato e una schermata del programma in esecuzione. Altrimenti perdiamo una giornata a capirci per una cosa banale


  • Ecco qui
  • Cambia compilatore. E possibilmente non uno online ...
  • oregon ha scritto:


    Cambia compilatore. E possibilmente non uno online ...
    Quindi l'errore è del compilatore e non nostro giusto?
Devi accedere o registrarti per scrivere nel forum
11 risposte