Warum kann ich Boolesche Logik auf Bytes?
-
06-07-2019 - |
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?
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