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=intlong+long=longfloat+float=floatdouble+double=double
Also warum nicht:
byte+byte=byteshort+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 | byte2behandelt 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.