Frage von PlayerPro, 149

Warum kann ich keine Bytes in Java addieren?

byte aByte = (byte) a;
    byte bByte = (byte) b;
    byte cByte = (byte) c;
    byte dByte = (byte) d;
    byte eByte = (byte) e;
    byte fByte = (byte) f;
    byte gByte = (byte) g;
    byte hByte = (byte) h;

    System.out.println (aByte);
    System.out.println (bByte);

    byte SumByte = aByte + bByte;
    System.out.println (SumByte);

Die Variablen a bis h sind haben verschiedene Typen und da ich sie als Bytes addieren muss, habe ich sie auch in Bytes umgewandelt. Das Problem ist: ich kann sie trotzdem nicht addieren (der Wertebereich wird nicht überschritten, da aByte 14 und bByte 24 sind). Es kommt die folgende Fehlermeldung:

Error:(88, 30) java: incompatible types: possible lossy conversion from int to byte

Warum? Das ergibt für mich keinen Sinn.

Antwort
von EightSix, 129

Du musst es das Ergebnis explizit in byte casten. Java wandelt sicherheitshalber Ergebnisse in int um wenn zur Laufzeit der Wert nicht feststeht um eben keine Wertbereichsüberschreitung zu riskieren.

Kommentar von PlayerPro ,

Danke, es hat funktioniert :D

byte SumByte = (byte) (aByte + bByte + cByte + dByte + eByte + fByte + gByte + hByte);
Kommentar von RedKungFuMastr ,

Begründung, beim addieren von  2 Byte variablen entsteht ein Integer Wert...

Antwort
von RedKungFuMastr, 149

http://stackoverflow.com/questions/842817/how-does-java-convert-int-into-byte

Kommentar von PlayerPro ,

Wie gesagt, der Wertebereich von 128 wird nicht überschritten, das Ergebnis wäre 38 :/

Kommentar von RedKungFuMastr ,

Ok, kannst du mir dann verraten, welchen Wert jeweils die Variablen a bis h haben?

Kommentar von PlayerPro ,

Ja, das Ganze schaut folgendermaßen aus:

int a = 0xe;
int b = 030;
long c = 18L;
double d = 4.44e1;
double e = 55.5;
double f = 66e-1f;
float g = 7.7f;
char h = 'F';
Mir ist schon klar, dass ich einen Überlauf haben werde wenn ich alles addiere, aber warum scheitert das schon bei 14 + 24?
Kommentar von RedKungFuMastr ,

Was steht bei dir auf der 88. Zeile?

Kommentar von PlayerPro ,

Bei: 

byte SumByte = aByte + bByte;

=> Incompatible types. Required: byte, found: int

Die Fehlermeldung ist sinnlos, beide sind vom Typ byte

Kommentar von RedKungFuMastr ,
Kommentar von RedKungFuMastr ,

Ne verrückte Idee, was, wenn du die Summe nochmal als byte castest.

Keine passende Antwort gefunden?

Fragen Sie die Community