Bu C # koduna bakarak:
byte x = 1;
byte y = 2;
byte z = x + y; // ERROR: Cannot implicitly convert type 'int' to 'byte'
byte
(Veya short
) türler üzerinde yapılan herhangi bir matematiğin sonucu dolaylı olarak bir tam sayıya geri döndürülür. Çözüm, sonucu açıkça bir bayta geri döndürmektir:
byte z = (byte)(x + y); // this works
Merak ediyorum neden? Mimari mi? Felsefi?
Sahibiz:
int
+int
=int
long
+long
=long
float
+float
=float
double
+double
=double
Yani neden olmasın:
byte
+byte
=byte
short
+short
=short
?
Biraz arka plan: "Küçük sayılar" (yani <8) üzerinde uzun bir hesaplama listesi gerçekleştiriyorum ve ara sonuçları büyük bir dizide saklıyorum. Bayt dizisi kullanmak (int dizisi yerine) daha hızlıdır (önbellek isabetlerinden dolayı). Ancak kod boyunca yayılan geniş bayt atımları onu daha okunamaz hale getirir.
byte1 | byte2
onlara sayı gibi davranmaz. Bu onlara tam olarak bit kalıpları gibi davranıyor. Bakış açınızı anlıyorum, ama öyle oluyor ki, her seferinde C #'daki baytlarda herhangi bir aritmetik yaptım, aslında sayı olarak değil bit olarak davranıyordum ve bu davranış her zaman yolunda.