2012-07-15 17 views
7

Quando un numero intero non rientra nell'intervallo del tipo, il valore massimo + 1 viene aggiunto/sottratto (dipende da quale parte dell'intervallo era il numero). Ad esempio,Perché le conversioni implicite C funzionano come fanno?

unsigned short num = 65537; 

num avrà un valore 1 (65536 è stato sottratto). La mia domanda è: perché succede? Il mio intuito mi dice che ha qualcosa a che fare con il flag carry e il flag overflow, perché il valore massimo è sempre 1111 ....

Grazie in anticipo!

+4

Si tronca ... – Mehrdad

+0

Esempio perfetto del motivo per cui è necessario compilare praticamente tutti gli avvisi possibili attivati. Per quanto riguarda il motivo per cui è nello standard però .... Nessuna idea: p. (A meno che non intenda specificamente 1. Questo è solo un overflow di complimenti di un 2). – Corbin

+0

Esempio di tale messaggio di avviso: 'avviso: intero grande implicitamente troncato in tipo senza segno ' – curiousguy

risposta

7

Per una macchina che utilizza in complemento a due per interi con le regole per la conversione a un N bit senza segno tipo sono equivalenti a scartare tutte ma ordine basso N bit. per l'hardware tipico, questo è il modo più semplice per eseguire la conversione.

Lo standard consente altre rappresentazioni per interi con segno, ma utilizza le stesse regole di conversione per motivi di coerenza. Ciò potrebbe richiedere un lavoro extra su tali macchine, ma (a) tali macchine sono piuttosto rare, e (b) la spesa dovrebbe essere abbastanza piccola comunque.

Problemi correlati