Per quanto riguarda la motivazione: lascia immaginare le alternative a questo comportamento e vedere il motivo per cui non funzionano:
Alternativa 1: il risultato dovrebbe essere sempre lo stesso come gli ingressi .
Quale dovrebbe essere il risultato di aggiungere un int e un breve?
Quale dovrebbe essere il risultato per moltiplicare due cortocircuiti? Il risultato in generale si inserirà in un int, ma poiché tronceremo in breve, la maggior parte delle moltiplicazioni fallirà silenziosamente. Il casting su un int dopo non ti aiuterà.
Alternativa 2: il risultato deve sempre essere il tipo più piccolo che possa rappresentare tutte le uscite possibili.
Se il tipo di reso fosse breve, la risposta non sarebbe sempre rappresentabile come un breve.
Un corto può contenere valori da -32.768 a 32.767. Quindi questo risultato causerà un overflow:
short result = -32768/-1; // 32768: not a short
Quindi la domanda diventa: perché l'aggiunta di due ints non restituisce un lungo? Quale dovrebbe essere la moltiplicazione di due interi? Lungo? Un numero grande per coprire il caso del valore minimo dell'intero quadrante?
Alternativa 3: scegliere la cosa maggior parte delle persone probabilmente vogliono la maggior parte del tempo
Così il risultato dovrebbe essere:
- int per moltiplicare due cortometraggi, o qualsiasi int operazioni.
- short se si aggiungono o si sottrae cortocircuiti, dividendo un cortocircuito di un qualsiasi tipo intero, moltiplicando due byte, ...
- byte se il bithifting è un byte a destra, int se si sposta a sinistra.
- ecc ...
Ricordando tutti i casi particolari sarebbe difficile se non v'è alcuna logica fondamentale per loro. È più semplice dire semplicemente: il risultato di operazioni intere è sempre int.
fonte
2010-02-13 08:46:10
Poiché la conversione di una int in una breve darebbe una possibile perdita di precisione. (-32768/-1) –