2014-11-07 49 views
5

Ben bir long üzerinde << operatörünü kullanmak şöyle çalışıyorum:Operatör << Uzun ve uzun tip işlenenler için uygulanamaz

Operator << cannot be applied to operands of type long and long.

:

((long) num3) << (2 + (long) num4))) 

Bu bana aşağıdaki hatayı veriyor

num4'u long ürününe aktarmazsam, hata yoktur. Ancak, onu int olarak tutamıyorum. Bunun etrafında başka bir yolu var mı?

+2

Gerçekten '<< 'istiyor musun, değil mi? – Tim

+0

Niçin operatörde 'long''a döküm yapıyorsunuz? Bit kaydırmayı yapın ve sonucu 'uzun' olarak yayınlayın. Sorun çözüldü. – BradleyDotNET

+3

Uzun bir süreyi 64 bitten fazla kaydırmak mantıklı değil, bu nedenle sağ operatörün uzun olması gerekmiyor. – vcsjones

cevap

12

Doğru işlenenin, long değil, int olması gerekir. C# cinsinden tümleşik türler 64 bitten fazla olmadığından, long'u kaydırılacak bit sayısı olarak kullanmak mantıklı olmaz.

+5

Uh, neden düşüşler? Yanlış bir şey mi söyledim? Lütfen reddettiğinizde, neyin yanlış olduğunu bildiğimden emin olun ... –

+1

Bu doğru, neden kimse onu düşürdüğünden emin değil. C# spec temelde 7.9'da yazıyor. "ikinci işlenenin türü her zaman int olmalıdır." Varsayım dinamik ile kullanılmamaktadır. – vcsjones

+0

Oy vermedim .. ama birisinin bu cevaptan hoşlanmayabileceği bir şey olduğunu tahmin etmem, bu soruyu soran kişinin neden sorduğunu bilmeden bir cevaptır "Bunu bir int olarak tutamıyorum." Bu yüzden cevabın, gerçekleri doğru bir şekilde ifade etmesine rağmen, orijinal soruya “uygun” bir cevap olma şansı daha düşüktür. Sadece benim teorimim .. Hiç beğenmedim, herhangi bir yorum yapmadan oylama yapılmazsa ... aklıma gelen bir bakış açısını paylaşıyorum. Buna eklemek için –

İlgili konular