この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配列の代わりに)バイト配列を使用すると高速になります。しかし、コード全体に広範にわたるバイトキャストが広がっているため、コードをはるかに読みにくくしています。
byte1 | byte2
それらを数値として扱うことはまったくありません。これはそれらをビットのパターンとして正確に扱っています。私はあなたの見解を理解していますが、C#でバイトに対して算術演算を行うたびに、実際にはそれらを数値ではなくビットとして扱っていたため、この動作は常に妨げになっています。