Variablen Negatives Ergebnis bei Multiplikation von großen Zahlen

Pflaumi123

Mitglied
Hallo zusammen,

für mich ist Java zur Zeit noch völliges Neuland. Deshalb bin ich gerade etwas am rumprobieren.
Nun habe ich 3 Variable vom Typ int. Wenn ich nun 2 ziemlich große positive Zahlen multipliziere, bekomme ich ein negatives Ergebnis. Es hat sicherlich etwas damit zu tun, dass das Ergebnis über den Bereich des Integer hinausgeht. Aber das erklärt mir nicht warum etwas negatives bei rauskommt. :bahnhof: Hat jemand eine Idee?

hier mein Quelltext:


Java:
 import javapack.Einlesen;
public class Uebung3A2 {

	public static void main(String[] args) {
		
		int a,b,c;
		
		a = Einlesen.LiesInt("ganze Zahl ");
		b = Einlesen.LiesInt("Ganze Zahl ");
System.out.print( "a * b = " + (a * b) + );
	}
}

mit zwei großen Zahlen spuckt er mir dann das aus:

Java:
ganze Zahl 2000000
Ganze Zahl 150000
a * b = -647710720

Danke für eure antworten 🙂
 
Dazu müsstest du dich damit beschäftigen wie ein Computer überhaupt Zahlen speichert. Das kann er nämlich nur mit Zahlen im binären Zahlensystem, da ein Computer nur zwei Zustände kennt: Strom liegt an (1) oder kein Strom liegt an (0).

Wenn du nun z.B. 3 bit nimmst, dann kann ich damit folgende Zahlen im binärsystem darstellen:

000
001
010
011
100
101
110
111

Würde man diese als vorzeichenlos Zahl ins Dezimalsystem übersetzen würde man folgende Werte erhalten

000 - 0
001 - 1
010 - 2
011 - 3
100 - 4
101 - 5
110 - 6
111 - 7

Man könnte mit einer 3 bit Variablen also die Zahlen 0-7 darstellen.

Was aber tun wenn man negative Zahlen darstellen will? In dem Fall wird einfach binär von 0 rückwärts gezählt. Also

000 - 0
111 - -1
110 - -2
101 - -3
100 - -4

Die nächste binär Zahl wäre jetzt 011, diese ist nicht mehrvnegativ, da das höchste bit nicht gesetzt ist.

Das bedeutet

011 - 3
010 - 2
091 - 1

Wir können mit drei bit also die Zahlen -4 bis 3 darstellen. Der Trick dabei ist, dass der Computer gar nicht weiß ob es sich um vorzeichenbehaftete oder vorzeichenlose Zahlen handelt. Er behandelt diese einfach vollkommen gleich.

Würde ich nun zwei 3 bit Zahlen addieren (oder multiplizieren das ist dann ja egal) die den Wertebereich der 3 bit sprengt, also z.b.

3+2

011 + 010

So ergibt das für den Computer

101

Also binär gesehen 5, da wir es aber vorzeichenbehaftet betrachten ist das -3.

Gruß

Claus
 

Zurück
Oben