Frage

    

Diese Frage bereits eine Antwort hier:

    
            
  •              Byte + Byte = int ... warum?                                      16 Antworten                          
  •     
    

Ich habe Code zu folgenden in VS2008 .net 3.5 mit WinForms:

byte percent = 70;
byte zero = 0;

Bitmap copy = (Bitmap)image1.Clone();
...

Color oColor = copy.GetPixel(x, y);
byte oR = (byte)(oColor.R - percent < zero ? zero : oColor.R - percent);

Als ich die „ (byte) “ wegzulassen der letzten Zeile des Codes, ich einen Compiler-Fehler sagen, es „kann nicht implizit Typ umwandeln‚int‘auf‚byte‘.“ Wenn alles vom Typ byte ist und byte ist ein Integer-Typ ... warum dann muß ich die Besetzung haben?

War es hilfreich?

Lösung

Da Subtraktion Nötigung auf eine ganze Zahl auf. Soweit ich mich erinnere, Byte ist ein Typ ohne Vorzeichen in C #, so Subtraktion können Sie aus der Domäne von Bytes übernehmen.

Andere Tipps

Das ist, weil das Ergebnis einer Byte Subtraktion nicht in einem Byte paßt:

byte - byte = (0..255) - (0..255) = -255..255

Arithmetik auf Bytes Ergebnisse in einem int Wert in der Standardeinstellung.

Da Arithmetik auf Byte ganze Zahlen von Standard gibt so der beiden möglichen Zuordnungen der schmalere Typ von Null (Byte) gefördert wird, in int (das von oColor.r - Prozent). Somit ist die Art der Operation ist ein Int. Der Compiler wird nicht ohne gegossen, können Sie einen größeren Typ auf einen engeren Typ zuordnen, da es sich um eine verlustbehaftete Operation ist. Daher Sie den Fehler, wenn Sie nicht ausdrücklich sagen: „Ich weiß, dass ich einige Daten bin zu verlieren, es ist in Ordnung“ mit den Darstellern.

Das ist, weil byte Subtraktion eine int zurückgibt. Eigentlich alle binären arithmetischen Operationen auf bytes werden ein int zurückkehren, so dass der Guss erforderlich ist.

Da arithmetische Operationen auf sbyte, Byte, ushort und kurz werden automatisch umgewandelt int. Der plausibelste Grund dafür ist, dass solche Operationen wahrscheinlich zu überlaufen oder unter.

So in Ihrem ternären Betrieb, die endgültigen oColor.R - Prozent, tatsächlich zu einem int, kein Byte. So ist der Rückgabetyp der Operation ist int.

Da der arithmetische Ausdruck auf der rechten Seite des Zuweisungsoperators wertet standardmäßig in int. In Ihren Vorgaben Beispiel percent int. Sie können weitere Informationen auf der MSDN-Seite .

Versuchen Sie, diese C # Code auszuführen:  Objekt o = (byte) (1);  o = (int) o; Was erwartest du? Jetzt versuchen:)

Ich denke, das ist richtig:

  
    

Eric Lippert sagt: „Ich glaube nicht, von Bytes als‚Zahlen‘; ich von ihnen als Muster von Bits denken, die als Zahlen interpretiert werden könnten, oder Zeichen oder Farben oder was auch immer Wenn du gehst zu sein. tut Mathe auf sie und sie als Zahlen zu behandeln, dann macht es Sinn, das Ergebnis in einen Datentyp zu bewegen, die häufiger als Zahl interpretiert wird.“

  

Vielleicht Byte ist näher an char als zu int.

FWIW, java fördert auch die Bytes in int.

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