Salve a tutti, ho una curiositá con la variabile long e la rispettiva unsigned,
Se li do un valore compreso nel suo massimo non ce problema come ad esempio "unsigned long AAA = 300000;"
Se invece li do un valore calcolato come ad esempio "unsigned long AAA = 1000 * 60 * 5;" la variabile prende il suo valore massimo di 4 miliardi e passa, però questo succede solo fin quando il risultato supera poco più di 32 mila, ad esempio se faccio "1000 * 32" la variabile prende il valore 32000, se invece faccio "1000 * 33" qua invece prende il suo valore massimo, per carità non e un problema pero volevo sapere se ce un motivo, non me ne intendo molto sul funzionamento della Cpu pero sembra che i calcoli per assegnamento di variabili li faccia in "int" e quindi il valore massimo calcolabile e (2^16)/2-1
Se potete togliermi sta curiosità mi fate un favore
![]()
Grazie mille
Quando sbaglia è perché Tu usi tutti numeri interi
E il risultato va in overflow, poi lo assegni ad unsigned, e viene un grosso pastone
Fai che almeno uno degli operandi sia unsigned long
Del tipo 1000UL * 60 * 5
Aggiungo, che questo accade con quasi tutti i "linguaggi", gli operatori devono essere dello stesso tipo dato che vuoi ottenere. In TSQL, se operi decimal e int ottieni risultati imprevisti, in NET se vuoi ottenere un int64, almeno uno dei due operatori deve essere int64.
In generale bisogna sempre stare attenti quando si fanno operazioni matematiche, al tipo di tutti gli attori in quanto il risultato potrebbe essere diverso dalle aspettative, e non sempre il compilatore genera errore, anche perchè, come nel tuo caso, dal suo punto di vista l'operazione è lecita.
Federico
Capito, ok grazie mille una curiosità in meno
![]()