Frage

In C # (3.5) Ich versuche, die folgenden:

byte byte1 = 0x00;
byte byte2 = 0x00;
byte byte3 = byte1 & byte2;

und ich bekomme Fehler 132: „Kann nicht implizit konvertiert Typ‚int‘auf‚byte‘Eine explizite Konvertierung vorhanden ist (sind Sie nicht eine Besetzung?).“. Das gleiche geschieht mit | und ^.

Was mache ich falsch? Warum ist es mir über ints zu fragen? Warum kann ich Boolesche Logik auf Bytes?

War es hilfreich?

Lösung

Verschiedene Betreiber nicht für byte erklärt - beiden Operanden zu int befördert zu werden, und das Ergebnis ist int. Zum Beispiel Zusatz:

byte byte1 = 0x00;
byte byte2 = 0x00;
byte byte3 = byte1 + byte2; // Compilation error

Beachten Sie, dass die Verbindung Zuweisungen funktionieren:

byte1 += byte2;

Es gab ein letzte SO auf dieser in Frage stellen. Ich bin damit einverstanden dies besonders ärgerlich ist aber für bitweise Operationen, in denen das Ergebnis ist immer gleich groß sein sollten, und es ist eine logisch völlig gültige Operation.

Als Abhilfe können Sie nur das Ergebnis zurückgeworfen auf Byte:

byte byte3 = (byte) (byte1 & byte2);

Andere Tipps

Da Byte (und kurz) Typen implementieren nicht jene Operatoren

Siehe Spec: 4.1.5

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top