2016-03-21 40 views
4

Birleştirilmiş bitlerin belirli bir bit içerip içermediğine ilişkin bir önceki soruğumda bu hataya koşuyorum. Operatör "&", byte, int, boolean için uygulanamaz.

int flag1 = 1 << 0; 
    int flag4 = 1 << 5; 

    int combined = flag1 | flag4; 

    if (combined & flag1 == flag1) // <-- Operator & cannot be applied to int, boolean 

hata byte ile int değiştirir byte bayrakları döküm edin.

+0

Oh, henüz başka bir Java operatör öncelik soru ... çok gerçekten bana kafa karıştırıcı:

istenilen sırayla değerlendirilecek operatörler için sipariş parantez ekleyin! (Tabii ki PHP 'den daha iyisi var mı?:': P) – minmaxavg

cevap

9

derleyici o kadar mantıklı davranır VE senin if açıklamada ikili operatörü & görür (bir boolean döndüren bir ifade beklediği beri) ve parametre tiplerini kontrol eder. combined - - ve bir boolean argüman - flag1 == flag1

Biri int argüman karşılaşır. İki boolean argümanı (& operatörü bir int ve boolean'a uygulanamaz) beklediğinden, bir hata verir.

if ((combined & flag1) == flag1) 
+0

Teşekkürler, lol Sorunu düzenlediğimden beri mesajınızı düzenlemeye çalıştım. Ama güncelledikten hemen sonra;). "AOE", "flag1" veya "flag4" olmalıdır. Önceki sorumda herkes bana parantez olmadan cevap veriyordu, merak ediyorum neden ... – Madmenyo

+0

@MennoGouw Evet, senin düzenlemeni fark ettim ve cevaba ekledim. – Eran

+0

Çok iyi açıklanmış bir cevap için teşekkürler. Karşılaştırma ve işlemler konusunda biraz yeniyim ama şimdi anlıyorum. – Madmenyo