2016-04-06 19 views
-2

Hata alıyorum. Her türlü yazım denemeyi denedim ama yardım yok. Lütfen neler olduğunu bana bildirin.Bit vardiyası sırasında derleme hatası "Imp içten içe" int "-" byte "türüne dönüştürülemiyor"

Error: Cannot implicitly convert type 'int' to 'byte'. An explicit conversion exists (are you missing a cast?) 

byte[] bitVector = new byte[UInt32.MaxValue/8]; 

//bitVector[((UInt32)x/8)] |= (1 << ((int)(x % 8))); ERROR 
//bitVector[((UInt32)x/8)] |= (1 << Convert.ToByte(x % 8)); ERROR 
bitVector[((UInt32)x/8)] |= (1 << 5); //No Error 
+0

BitVector array –

+0

@Mrinal Kamboj I hakkında soru sordu. Bu Byte [] – user3604557

+0

Neredeyse kopya - http://stackoverflow.com/questions/4123788/whats-wrong-with-this-expression-cannot-implicitly-convert-type-int-to-byte, tam olarak bulmak için çekinmeyin Vardiya operatörleri tarafından kabul edilen/döndürülen türleri açıklayan yineleme (ipucu: bayt bunlardan biri değildir). Derleme zamanı sabitleri için kuralların farklı olduğunu ve başka bir çoğaltmanın (son satır örneğiniz için) karşılanacağını unutmayın. –

cevap

1

yardımcı olacaktır ardından

bitVector[((UInt32)x/8)] |= (byte)(1 << x % 8) 

bit işlemin sonucu integer olduğunu ve bu nedenle

+0

Yanıt verdiğiniz için teşekkür ederiz. Hata alıyorum. "Operatör '<<'," int "ve" uint "türünde işlenenlere uygulanamaz" – user3604557

+0

x türünde nedir? " –

+0

Tamam, x uint tipiniz, sonra aşağıdaki değişiklikleri yapmanız gerekir: (bayt) (1 << (int) (x% 8)). (X% 8) 'i açıkça tamsayıya dönüştürün. –

0

Buna kullanmaya gerek açık bir typecast ihtiyacı byte tip olarak doldurmaya çalışıyoruz

bitVector [((UInt32) x/8)] | = ((bayt) 1 < < (1% 8)) ;

Size sorun veren ikisi bunu yapıyor çünkü bir bayt dizisine geçişi zorlayarak bir bayt dizisine bir int (sonuç bayt değişiminin sonucu) atamaya çalışıyorsunuz. Beklenen Sonuç.

+0

Yanıt verdiğiniz için teşekkür ederiz. Ben bunu kullanıyorum en kısa sürede hatayı alıyorum (x% 8). İstediğimi unutmayın (x% 8), değil (% 1 8) – user3604557

İlgili konular