Il solito le conversioni aritmetiche vengono eseguite sugli operandi di addizione. Per i tipi interi, questo consiste delle promozioni intere, se necessario, e se i due operandi non hanno lo stesso tipo viene eseguita un'ulteriore conversione per portarli a un tipo comune.
Nel primo caso non ci sono promozioni ma la int
operando viene convertito unsigned int
perché int
non può contenere tutti i possibili valori di unsigned int
.
Nel secondo caso entrambi gli operandi vengono promossi a int
e rimangono come int
poiché hanno un tipo comune.
Per riferimento il progetto di norma C11 nella sezione 6.5.6
Operatori additivi dice:
Se entrambi gli operandi hanno tipo aritmetico, le usuali conversioni aritmetiche vengono eseguite su loro.
sezione 6.3.1.8
conversioni aritmetiche usuali dice:
Molti operatori che prevedono operandi di tipo aritmetico causa conversioni e tipi di risultato resa in un modo simile. Lo scopo è di determinare un tipo reale comune per gli operandi e il risultato. Per gli operandi specificati da , ciascun operando viene convertito, senza modificare il dominio di tipo , in un tipo il cui tipo reale corrispondente è il tipo comune reale . Se non diversamente specificato, il tipo reale comune è anche il tipo reale corrispondente del risultato, il cui dominio di tipo è il dominio di tipo degli operandi se sono uguali e complesso . Questo modello è chiamato usuali conversioni aritmetiche
[...]
Altrimenti, promozioni interi vengono eseguite su entrambi gli operandi. Poi le seguenti regole vengono applicate alle operandi promosse
[...]
- Altrimenti, se l'operando che ha senza segno tipo intero ha rango maggiore o uguale al rango del tipo di altro operando, quindi l'operando con tipo integer segnato convertito al tipo dell'operando con unsigned tipo integer
[...]
Un buon riferimento per la motivazione di questo può essere trovato nella domanda: Why must a short be converted to an int before arithmetic operations in C and C++?.
fonte
2015-10-02 14:56:08
Dai uno sguardo a: [In un'espressione C in cui sono presenti int unsigned e signed sign, quale tipo verrà promosso a quale tipo?] (Http://stackoverflow.com/questions/2280663/in-ac-expression -where-unsigned-int-and-signed-int-are-present-which-type-will) Spero che ti possa aiutare. – Missu
Fornire un'immagine per l'output testuale? Viene caricato automaticamente quando qualcuno apre questa domanda? Hai un tracker dietro?) Per favore usa solo il taglia e incolla in questi casi. –
Un bell'esempio di post di base, ma ben formato: titolo chiaro, istruzione di difficoltà chiara, codice di esempio, output, output previsto, tag buoni. – chux