Perché il 4% -8 è uguale a 4? [duplicare]

Nov 01 2020

In Java,

4 % -8

sta dando 4 come output e non

-4

come previsto da me.

Risposte

7 LouisWasserman Nov 01 2020 at 17:35

Questo è trattato in dettaglio nella sezione 15.17.3 della specifica del linguaggio Java .

L'operazione resto per gli operandi che sono numeri interi dopo la promozione numerica binaria (§5.6) produce un valore di risultato tale che (a / b) * b + (a% b) è uguale ad a.

Questa identità vale anche nel caso speciale in cui il dividendo è il numero intero negativo di grandezza maggiore possibile per il suo tipo e il divisore è -1 (il resto è 0).

Da questa regola consegue che il risultato dell'operazione restante può essere negativo solo se il dividendo è negativo, e può essere positivo solo se il dividendo è positivo. Inoltre, la grandezza del risultato è sempre inferiore alla grandezza del divisore.

Quindi, ad esempio, -4 % 8è effettivamente -4, ma poiché 4/-8è 0, e 0 * -8 == 0, il resto 4 % -8deve essere 4.