Sì, questo è sempre vero.
È una proprietà che viene trattenuta perché si sta effettivamente eseguendo il modulo aritmetico 2^32. Il fatto che Java int
sia firmato complica leggermente le cose (e significa che non si può presumere che si stia facendo l'equivalente dell'aritmetica dei moduli in generale), ma non influisce su questa particolare proprietà distributiva.
Un esperimento di pensiero consiste nel prendere in considerazione l'implementazione utilizzando aggiunta ripetuta e considerare cosa succede quando viene espulso. Poiché l'ordine delle aggiunte non influisce sul risultato con int
s (anche con overflow), quindi non fa le moltiplicazioni come aggiunte ripetute in un ordine diverso. E dal momento che il moltiplicare int
equivale sempre a un'aggiunta ripetuta, i risultati devono essere uguali anche per la moltiplicazione riordinata. Come volevasi dimostrare
+1 L'utilizzo di underflow e overflow è raramente utile, e anche quando lo è, confonde la maggior parte delle persone. Se ti affidi a questo comportamento, dovresti documentarlo in dettaglio. –
concordato. In questo caso, sto facendo l'ottimizzazione del compilatore delle espressioni aritmetiche e devo fare attenzione a non cambiare la semantica. – Taymon