Datentypen type cast problem (int, byte,)

  • Themenstarter Themenstarter echseechse
  • Beginndatum Beginndatum
E

echseechse

Gast
Wie wird der Cast durchgeführt von größeren in kleinere Zahl-Typen oder allgemeiner von Typen mit Vorzeichen in Typen ohne Vorzeichen und umgekehrt...

konkret:
int -> byte
byte -> int

Erfolgen Konvertierungen nach Typen ohne Vorzeichen immer "1:1" dem Bitmuster nach, und von Typen mit Vorzeichen zu Typen mit auch Vorzeichen immer unter Berücksichtigung des Vorzeichens?
 
Typen ohne Vorzeichen? Wieviele kennst du denn in Java? 🙂

Wie genau das geht kannst du in JLS §5.1 nachlesen.
byte > int ist "widening primitive conversion". Da geht idR nichts verloren.
int > byte ist "narrowing primitive conversions". Da wird einfach nur abgeschnitten
 
Zuletzt bearbeitet:
es gibt ja nur folgende Möglichkeiten

vorzeichenbehaftet: V, vorzeichenlos: L, größer: G, kleiner: K
LK -> LG (Bsp. byte -> char)
LK -> VK (Bsp. char -> short)
LK -> VG (Bsp. byte -> short)
LG -> LK (Bsp. char -> byte)
LG -> VK (Bsp. char -> short)
LG -> VG (Bsp. char -> short)
VK -> LK (Bsp. short -> char)
VK -> LG (Bsp. short -> char)
VK -> VG (Bsp. short -> int)
VG -> LK (Bsp. short -> byte)
VG -> LG (Bsp. short -> char)
VG -> VK (Bsp. int -> short)

Oder einfach mit byte, char, short, int:

byte -> char
byte -> short
byte -> int

char -> byte
char -> short
char -> int

short -> byte
short -> char
short -> int

int -> byte
int -> char
int -> short


Such eeinfach 'ne Regel, die alle Fälle gemeinsam haben..
 
Eine Regel, die den Cast in allen Fällen eindeutig beschreibt und möglichst kurz ist.

z.B.
Unter Vorzeichenlosen einfach mit 0 auffüllend (ausweitende Konvertierung) oder vorne abschneidend (einengende Konvertierung)
Unter Vorzeichenbehafteten vorzeichenerhaltend und außerdem genauigkeitsverlustbehaftet bei Einengenden
von Vorzeichenbehafteten nach Vorzeichenlosen: wie unter Vorzeichenlosen, negative Zahlen werden dann immer positiv
von Vorzeichenlosen nach Vorzeichenbehafteten: wie unter Vorzeichenlosen, Zahlen die gleichgroß oder größer sind als (2^n)/2 sind dann negative Zahlen

richtig?
 
so kompliziert ist es doch nicht, das Vorzeichen bleibt nicht erhalten, wenn die Konvertierung einengend ist; dann werden einfach die niederwertigen Bits kopiert, die höherwertigen abgeschnitten. Bei ausweitenden Konvertierungen zwischen vorzeichenbehafteten Typen bleibt das Vorzeichen jedoch erhalten. Das ist soweit ich das seh, auch -neben der Konvertierung von Fließkommazahlen - die einzige Konvertierung, bei der das Bitmuster nicht einfach "1:1 von unten her" kopiert wird. Wenn man sich die Bitdarstellung argumentiert, kann man sich das besser merken.
 

Neue Themen


Zurück
Oben