なぜbyte + byte = intになるのでしょうか? 質問する

なぜbyte + byte = intになるのでしょうか? 質問する

この 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 ビットの) 整数になります。

おすすめ記事