Die Multiplikationsoperation in Java führt zu einem negativen Wert

8

Warum ergibt die folgende Berechnung einen negativen Wert?

%Vor%     
Ali 13.06.2011, 15:19
quelle

4 Antworten

33

Jeder dort enthaltene Ausdruck wird ausgewertet (zur Kompilierungszeit natürlich; es ist eine Konstante) als int * int anstelle von long * long . Das Ergebnis überläuft irgendwann. Verwenden Sie also L , um alle Operandenliterale lang zu machen:

%Vor%

Natürlich könnten Sie damit davonkommen, dass Sie nur einige der Operanden long machen, aber ich finde, dass es einfacher ist, alles zu ändern.

Nachdem Sie all dies gesagt haben, wenn Sie nach "30 Tage im Wert von Millisekunden" suchen, wäre es besser zu verwenden:

%Vor%     
Jon Skeet 13.06.2011, 15:21
quelle
3

Versuchen Sie dies, es wird nicht negativ sein:

%Vor%     
adarshr 13.06.2011 15:21
quelle
2

Ihr Wert ist 2592000000, was größer ist als der maximal vorzeichenbehaftete Ganzzahlwert 2 ^ 31 (2147483648). Dies wird als Integer-Überlauf bezeichnet, das Ergebnis wird ins Negative übergelaufen.

    
MK. 13.06.2011 15:22
quelle
2

Weil der Wert der Gleichung eine Zahl verursacht, die so groß ist, dass sie umläuft. Es ergibt sich eine Ganzzahl. Int

    
RMT 13.06.2011 15:20
quelle

Tags und Links