Melihat kode C # ini:
byte x = 1;
byte y = 2;
byte z = x + y; // ERROR: Cannot implicitly convert type 'int' to 'byte'
Hasil dari setiap matematika dilakukan pada byte
(atau short
) tipe secara implisit dilemparkan kembali ke integer. Solusinya adalah dengan secara eksplisit mengembalikan hasilnya ke byte:
byte z = (byte)(x + y); // this works
Apa yang saya pikirkan adalah mengapa? Apakah itu arsitektur? Filosofis?
Kita punya:
int
+int
=int
long
+long
=long
float
+float
=float
double
+double
=double
Jadi mengapa tidak:
byte
+byte
=byte
short
+short
=short
?
Sedikit latar belakang: Saya melakukan daftar panjang perhitungan pada "angka kecil" (yaitu <8) dan menyimpan hasil antara dalam array besar. Menggunakan array byte (bukan array int) lebih cepat (karena hit cache). Tetapi byte-cast yang luas menyebar melalui kode membuatnya lebih tidak terbaca.
byte1 | byte2
sama sekali tidak memperlakukan mereka sebagai angka. Ini memperlakukan mereka dengan tepat sebagai pola bit. Saya mengerti sudut pandang Anda, tetapi kebetulan bahwa setiap kali saya melakukan aritmatika pada byte dalam C #, saya benar-benar memperlakukan mereka sebagai bit, bukan angka, dan perilaku ini selalu menghalangi.