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=intlong+long=longfloat+float=floatdouble+double=double
Yani neden olmasın:
byte+byte=byteshort+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 | byte2onlara 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.