Çözüldü C# short + short toplamının Integer olarak dönmesinin sebebi nedir?

Bu konu çözüldü olarak işaretlenmiştir. Çözülmediğini düşünüyorsanız konuyu rapor edebilirsiniz.

bugzone2.0

Hectopat
Katılım
17 Şubat 2018
Mesajlar
471
Makaleler
1
Çözümler
5
Yer
İzmit/KOCAELİ
Daha fazla  
Cinsiyet
Erkek
Meslek
Jr. Java Back-end Developer
Soruyu bir örnek üzerinden anlatmaya çalışayım.

C#:
short deger1 = 50;
short deger2 = 50;
short toplam = deger1+deger2;

Kodu çalıştığında geriye hata döndürüyor. Hata: "Cannot implicitly convert type 'int' to 'short'. An explicit conversion exists (are you missing a cast?)"

Hatada int türü örtülü olarak short türüne dönüştürülemez diyor. Stack overflow üzerinde biraz konuyu araştırdım ve bazı açıklamalarda short ve short toplandığında ortaya int türü bir değer çıktığı yazıyor. Short veri tipi bildiğimiz üzere System. Int16 sınıfından türeyen 16Bit bir değer. Anladığım kadarıyla da bu iki aynı türde değer toplandığında ortaya 32 Bit bir sonuç çıkıyor. Sonuç 100 yani 16Bit sınırları içerisinde hala neden 32 Bit türe dönüyor?
Aynı mantıkta iki int sayı toplandığında 32 Bit ve 32 Bit değerler toplamı 64 Bit olmuyor da neden sadece short türünde bu sorun ortaya çıkıyor anlam veremedim.

Bir açıklamada + operatörü C# dilinde kullanıldığında işlemi otomatik olarak 32 Bit yapıyor deniyor, bu konu hakkında bilgi sahibi olan var mı?
 
Çözüm
Microsoft converts your Int16 variables into Int32 when doing the add function,

Bundan dolayı.

Toplama işleminde Int32'leri Int64'e çevirmiyor. Sorun hoşuma gitti bu arada, alışkın değiliz böyle konular görmeye.
+ operatörünün tüm sayıları Int32'ye cast ettiğini sanmıyorum zira iki long toplandığı zaman Int32 olmuyor.

short toplam = (short)(deger1 + deger2); diyerek bilinçli(explicit) dönüşüm yaparak sorunu aşabilirsiniz. Neden böyle davrandığını ben de bilmiyorum.

Benzer şekilde 2 byte toplandığında da Int32'ye cast ediliyor.
 
Bundan dolayı.

Toplama işleminde ınt32'leri ınt64'e çevirmiyor. Sorun hoşuma gitti bu arada, alışkın değiliz böyle konular görmeye.

Cevabınız için çok teşekkür ederim, o zaman 16bitlik değişkenler toplama işlemi esnasında 32 Bit'e çevriliyor, 32 ve 64 Bit olan değişkenler için herhangi bir işlem yapılmıyor diyebiliriz.
 
Cevabınız için çok teşekkür ederim, o zaman 16bitlik değişkenler toplama işlemi esnasında 32 Bit'e çevriliyor, 32 ve 64 Bit olan değişkenler için herhangi bir işlem yapılmıyor diyebiliriz.

16 bit için böyle. Diğerleri için bir yorum yapamam. Arkadaşın da belirttiği gibi casting işlemi hatayı çözer. Rica ederim.
 
+ Operatörünün tüm sayıları ınt32'ye cast ettiğini sanmıyorum zira iki long toplandığı zaman ınt32 olmuyor.

short toplam = (short)(deger1 + deger2); diyerek bilinçli(explicit) dönüşüm yaparak sorunu aşabilirsiniz. Neden böyle davrandığını ben de bilmiyorum.

Benzer şekilde 2 byte toplandığında da ınt32'ye cast ediliyor.

short toplam = (short)(deger1 + deger2);
Verdiğiniz dönüşüm çözümüne ek olarak kod şu şekilde de yazılabiliyormuş;

C#:
short a = 50;
short b = 50;
a +=b;

İşin garip tarafı ise a+=b işlemi ile a = a+b; işlemi aynı değil.
Matematiksel olarak bu iki işlem birbirinin aynısı olsa da C# dilinde + operatörünü kullandığınızda 16Bit değişkenler 32 Bit'e cast edilip 16Bit bir değişkene atandığı için hata verirken a+=b; işleminin karşılığı(açılımı) a = (X)(a+b); oluyor ve buradaki x a'nın türü oluyor.
Yani a'nın short türünde olduğunu varsayarsak a+=b; işlemi derleyicide a=(short)(a+b); olarak karşılık buluyor.
Konu ile ilgili stackoverflow üzerindeki tartışmanın linki;
StackOverflow short+=short problem.
 

Yeni konular

Geri
Yukarı