Betrachten Sie diesen C # -Code:
byte x = 1;
byte y = 2;
byte z = x + y; // ERROR: Cannot implicitly convert type 'int' to 'byte'
Das Ergebnis einer für byte
(oder short
) Typen durchgeführten Mathematik wird implizit auf eine Ganzzahl zurückgesetzt. Die Lösung besteht darin, das Ergebnis explizit in ein Byte umzuwandeln:
byte z = (byte)(x + y); // this works
Was ich mich frage ist warum? Ist es architektonisch? Philosophisch?
Wir haben:
int
+int
=int
long
+long
=long
float
+float
=float
double
+double
=double
Also warum nicht:
byte
+byte
=byte
short
+short
=short
?
Ein bisschen Hintergrund: Ich führe eine lange Liste von Berechnungen für "kleine Zahlen" (dh <8) durch und speichere die Zwischenergebnisse in einem großen Array. Die Verwendung eines Byte-Arrays (anstelle eines int-Arrays) ist schneller (aufgrund von Cache-Treffern). Aber die umfangreichen Byte-Casts, die über den Code verteilt sind, machen ihn umso unlesbarer.
byte1 | byte2
behandelt sie überhaupt nicht als Zahlen. Dies behandelt sie genau als Muster von Bits. Ich verstehe Ihren Standpunkt, aber es kommt einfach so vor, dass ich jedes Mal, wenn ich in C # eine Arithmetik für Bytes durchgeführt habe, diese tatsächlich als Bits und nicht als Zahlen behandelte, und dieses Verhalten ist immer im Weg.