# JAVA Datentypen/Überlauf



## bruce00 (13. Mrz 2015)

Hallo liebe Community,

bin neu hier, habe mich gerade eben registriert.
Ich bin neu in Java und habe bisschen mit dem Datentypen rumgespielt. Meine Frage ist folgendes:
es kommt zu einem Überlauf der Datentypen, wenn der Wertebereich überschritten wird. Bei Int und long kann ich das feststellen. Leider bekomme ich bei Byte und short andere Ergebnisse.

(int +Wertebereich + 1) = int - Wertebereich
(int -Wertebereich - 1) = int + Wertebereich

Mit dem Datentyp long passiert genau das gleiche. Nun, wenn ich das für byte und short mache, kriege ich andere ergebnisse(unten):

```
byte negWertebereich = -128;

        System.out.println("Überlauf");
        System.out.println(negWertebereich - 1);
```

Ausgabe ist: -129.
Es müsste aber 127 rauskommen, weil der Wertebereich in den plus Bereich rutscht.

Kann mir einer sagen, warum das rauskommt. Habe ich was falsch gemacht.

Danke im Vorraus!


----------



## Chisao (13. Mrz 2015)

Wenn ich mich nicht täusche ist die Ausgabe ein integer weil implizit der Byte zu int gecastet wird.

```
System.out.println((byte)(negWertebereich - 1));
```
Das wäre die Lösung


----------



## bruce00 (13. Mrz 2015)

Danke.
Ich verstehe schon nun.

```
System.out.println((byte)(negWertebereich - 1));// ergibt : 127 aber, wenn ich addiere dann wird es  wieder gecastet in int.
 System.out.println((byte)(posWertebereich + 1)); // ergibt 128 müsste -128 ergeben.
```

Standard Datentyp ist int. Das weiss ich aber ich raff es nicht, vllt. weil die 1 vom Datentyp int ist.

//P.S: Danke hat geklappt. Ich hatte die Klammern vergessen.


----------



## bruce00 (13. Mrz 2015)

Ich denke, dass diese besonderheit nur bei Java ist. Der Parser hat seine eigene Vorgehensweise um den Ergebnistyp einer arithmatischen Operation zu bestimmen.
Das selbe Problem, wenn ich byte a = 1; byte b = 11; byte c = a + b ausrechnen will.

Also nochmals vielen Dank.


----------



## Chisao (13. Mrz 2015)

bruce00 hat gesagt.:


> Ich denke, dass diese besonderheit nur bei Java ist. Der Parser hat seine eigene Vorgehensweise um den Ergebnistyp einer arithmatischen Operation zu bestimmen.
> Das selbe Problem, wenn ich byte a = 1; byte b = 11; byte c = a + b ausrechnen will.
> 
> Also nochmals vielen Dank.



Ich leite es mir immer so her: Wenn du 2 Bytes addierst, könnte die Möglichkeit bestehen, dass der Datentyp Byte nicht ausreicht. Ob das in der Praxis nun so ist oder nicht ist dem Compiler in diesem Moment wurst. Implizit geht er auf Nummer sicher und nimmt einen Datentyp mit höherem Wertebereich. Um das zu verhindern musst du ihm explizit (mit (byte)) sagen, dass das Ergebnis in jedem Fall in eine Byte gesteckt werden soll.


----------

