この C# コードを見てみましょう:
byte x = 1;
byte y = 2;
byte z = x + y; // ERROR: Cannot implicitly convert type 'int' to 'byte'
byte
(または) 型で実行された計算の結果は、short
暗黙的に整数にキャストされます。解決策は、結果を明示的にバイトにキャストすることです。
byte z = (byte)(x + y); // this works
私が疑問に思うのは、なぜかということです。それは建築的なものでしょうか?哲学的なものでしょうか?
我々は持っています:
int
+int
=int
long
+long
=long
float
+float
=float
double
+double
=double
では、なぜそうしないのでしょうか:
byte
+byte
=byte
short
+short
=short
?
背景を少し説明します。私は「小さな数字」(つまり、< 8) に対して長い計算リストを実行し、中間結果を大きな配列に格納しています。バイト配列(int 配列の代わりに)を使用すると、(キャッシュ ヒットのため)高速になります。ただし、コード全体に広がる広範なバイト キャストにより、コードがさらに読みにくくなります。
ベストアンサー1
コード スニペットの 3 行目:
byte z = x + y;
実際には
byte z = (int) x + (int) y;
したがって、バイトに対して + 演算は行われず、バイトは最初に整数にキャストされ、2 つの整数の加算結果は (32 ビットの) 整数になります。