Casting in JAVA

w1zard

Grünschnabel
Hallo zusammen.....

Ich habe eine Frage über Casting in JAVA, vorallem über das Expliziten Casting

Z.B
Code:
public class Casting {
      public static void main(String[] args) {
      byte byte1;
      short short1;

      short1 = 383;        // dieser Wert ist Binär: 101111111
  
     // Hier kürze ich den Binären Wert auf 8 also 01111111
     byte1 = (byte) short1  

  // Ausgegeben wird 127, bis hier ist es ja logisch da das 
  // Bit ganz links (256) gelöscht wird, und somit 127 übrig 
  // bleibt wenn alle übrigen Bits zusammengezählt werden.

 System.out.print(byte1)
Ok bis dahin ist das resultat noch logisch....
Mein Problem ist jetzt aber ein anderen Code
Code:
public class Casting2 {
      public static void main(String[] args) {
      byte byte1;
      short short1;

      short1 = 511;        // dieser Wert ist Binär: 111111111
      
     // Hier kürze ich den Binären Wert auf 8 also 11111111
     byte1 = (byte) short1  

  // Ausgegeben wird hier aber -1, wenn ich das gleich 
 // ausrechnen sollte wie das obere
 // müsste ich auf 255 kommen
 System.out.print(byte1)
Wieso komme ich aber beim zweiten -1 anstatt 255 :confused:
 
das hier habe ich in java ist auch eine insel gefunden
Schlüsselwort/Typ Länge in Bytes Belegung (Wertebereich)
byte 1 –2^7 bis 2^7 – 1 (–128...127)

so wie ich das verstehe is 255 damit ausserhalb des werte bereichs....
 
Das erste Bit in diesem byte Wert ist dazu da, um anzuzeigen, dass ein Wert negativ oder positiv ist, weil geht ja von -127 bis + 127 glaub ich.

0 : positiv
1 : negativ

Das kannst du testen, indem du bspw. mal die Zahl 447 testet ... da kommt dann -65 oder so raus. Wieso dann aber nicht -127 rauskommt bei alles auf 1 weiss ich auch nicht genau :) ..
 
Das ist schon richitg:

Das erste Bit gibt immer das Vorzeichen an.

Da kannst du nur kürzen wenn das erste Zeichen gleich bleibt.
 
Ach ja bevor ichs vergess es geht nicht bis 255 weil es bei 0 anfängt

also von 0 bis 254

Vielleicht kommt deshalb -1 heraus, weil du den Bereich überschreitest

Kann mich auch irren.

Mfg RMI
 
Zurück