Konvertierungsmysterien.



  • byte u = 1, v = 0;
    v = u += 0xFE; // Variante 1 funzt.
    v = (byte)(u + 0xFE); // Variante 2 funzt.
    v = u + 0xFE; // Variante 3 funzt nicht.

    Weil Variante 1 funktioniert, wundert es mich, dass Variante 3 nicht geht, wieso?



  • Fehlermeldung: cannot convert int to byte.

    In Variante 1 benutzt du den += operator, in Variante 2 und 3 nimmst du den + operator.
    Die Operatoren sind unterschiedlich implementiert sodass der + Operator ein int zurück gibt während der += den Typ des linken Objektes zurück gibt.
    Darum funktioniert auch Variante 2 da du dort das int explizit nach byte castest.



  • http://msdn.microsoft.com/de-de/library/5bdb6693(VS.80).aspx

    Die folgende Zuweisungsanweisung führt zu einem Kompilierungsfehler, da der arithmetische Ausdruck auf der rechten Seite des Zuweisungsoperators standardmäßig den Wert int annimmt.

    Das Problem tritt bei der ersten Variante nicht auf, da es nur einen zu addierenden Wert gibt. Es kann daher implizit konvertiert werden.



  • Ok, danke für die Aufklärung!


Log in to reply