overflow / truncation

Status
Nicht offen für weitere Antworten.
B

Bigdawg

Gast
Hallo,

Hab mal eine Anfängerfrage:

Was passiert genau beim overflow genau?
Code:
                int n = Integer.MAX_VALUE;
		
		int m = n;
		
		System.out.println(n+m);
warum krieg ich hier den wert -2 in der console?
hat das etwas mt dem 2er Kompliment zu tun?




Was passiert genau beim truncation?

Code:
		byte a = 100, b = 100;
		System.out.println(a*=b);
warum krieg ich hier den wert 16 in der console?


thx for help
 

byte

Top Contributor
Zu 1) Integer hat 32 bit, d.h. die größte positive Integerzahl sind binär 31 1en. Bei Deiner Addition kriegst du also binär raus 111...10 (31 1en und eine 0). Die letzte 1 (ganz links) ist das Vorzeichen. Durch den Überlauf wird das ganze also negativ. Der Rest wird als Komplement interpretiert, also Dezimal die 2. Daher das Ergebnis -2.

Zu 2) 100 * 100 = 10.000 => binär: 10011100010000. In ein byte passen nur 8 bit, in diesem Fall also die rechten 8: 00010000 => dezimal 16.


Edit: Vertipper...
 
B

Bigdawg

Gast
danke @ byto, SnooP truncation hab ich jetzt verstanden.

aber ich versteh noch nicht den overflow so richtig.

2147483647 + 2147483647 = 4294967294

ist offensichtlich zu gross für ein int. Wie finktionniert das bitweise addieren? bzw Wie wird die Zahl binär Zahl angezeigt.
bei 32 bit.
 

byte

Top Contributor
Bigdawg hat gesagt.:
aber ich versteh noch nicht den overflow so richtig.

2147483647 + 2147483647 = 4294967294

ist offensichtlich zu gross für ein int. Wie finktionniert das bitweise addieren? bzw Wie wird die Zahl binär Zahl angezeigt.
bei 32 bit.

Intern wird immer binär gerechnet, nur bei der Ausgabe werden die Zahlen dezimal dargestellt. Einen Integer kannste so binär angucken:

Code:
System.out.println(Integer.toBinaryString(zahl));

Am besten liest Du Dir erstmal die Basics zum Dualsystem durch. Wenn Du das grundsätzlich verstanden hast, dann ist der Rest auch nicht mehr schwer.
 
Status
Nicht offen für weitere Antworten.

Ähnliche Java Themen

Neue Themen


Oben