Bayrak bitleriyle ilgili bir sorunum var. Bayrakları tutmak için bir int
değişkenim var. İlk önce bu değişkene bazı bayraklar koydum. Daha sonra, o değişkende kaç tane bayrak ayarlandığını kontrol etmeliyim. Ama bunu bilmiyorum.Bayrak bitlerini denetleme java
cevap
biraz değer ayarlanmış olup olmadığını görmek için kontrol etmek için:
int value = VALUE_TO_CHECK | OTHER_VALUE_TO_CHECK;
if ((value & VALUE_TO_CHECK) == VALUE_TO_CHECK)
{
// do something--it was set
}
if ((value & OTHER_VALUE_TO_CHECK) == OTHER_VALUE_TO_CHECK)
{
// also set (if it gets in here, then it was defined in
// value, but it does not guarantee that it was set with
// OR without other values. To guarantee it's only this
// value just use == without bitwise logic)
}
O bunu tüm veya Yok temsil sürece 0 olarak işaretli bir değere sahip olmamalıdır (ve bitsel mantık kullanmayın dikkat etmek önemlidir karşılaştırmak için; herhangi value & 0
Ayrıca DAİMA 0.
çünkü sadece) value == 0
kullanın bit alanları yerine bir EnumSet
kullanmayı düşünün. Ayrıca bkz. Bloch, Item 32.
Zeyilname: Bir beton example gibi:
Enum da zengin sağlamak kümelerini, geleneksel bit bayrakları için türgüvenli yedek: Özellikle
EnumSet.of(Style.BOLD, Style.ITALIC);
Not uygun yöntemler AbstractSet
miras ve AbstractCollection
.
Eğer a
b
setindeki tüm bayrak bitlerini sahip olmadığını kontrol etmek istiyorsanız, gibi kontrol edebilirsiniz: eğer, Ancak
public class BitFlags
{
public static boolean isFlagSet(byte value, byte flags)
{
return (flags & value) == value;
}
public static byte setFlag(byte value, byte flags)
{
return (byte) (flags | value);
}
public static byte unsetFlag(byte value, byte flags)
{
return (byte) (flags & ~value);
}
}
: Aşağıdaki kullanıyorum
(a & b) == b
"Düşük seviye" gerekmez, bunun yerine eklenen güvenlik türü için EnumSets
kullanılması önerilir.
- 1. denetleme
- 2. denetleme
- 3. denetleme
- 4. Parolaları Java keytool ile saklama olasılığı denetleme
- 5. Bir floatın bitlerini bir int olarak nasıl yeniden yorumlanır
- 6. Bayrak değişkeni nedir?
- 7. Python 2.7 argparse: Tek bayrak
- 8. Entity Framework - Denetleme faaliyeti
- 9. Dosya denetleme kodu F #
- 10. Gezinme yığındaki değişiklikleri denetleme
- 11. Satır bölümlerini denetleme
- 12. Değişken kapsamını denetleme
- 13. SQL Server Yinelenen Denetleme
- 14. Sürüm denetleme sistemlerini QlikView
- 15. Kod çalışırken denetleme yazın
- 16. sqlite sorgu sonuçlarını denetleme
- 17. Bir Rainbowduino denetleme sorunları
- 18. ggplot2 denetim göstergesini denetleme
- 19. Resim Yükleme Sırasını Denetleme
- 20. Svg öğelerinin kesişimini denetleme
- 21. Null denetleme uzantısı yöntemi
- 22. Sözlük'ten boole değerini denetleme.
- 23. Winforms'dan cmd.exe'yi denetleme
- 24. Önbellek Denetimlerini Denetleme
- 25. userlevel Denetleme ama
- 26. İletkenle durum değişikliklerini denetleme
- 27. Yay Güvenliği: https'yi bayrak ile zorlamak nasıl?
- 28. kullanın ya bir bayrak argüman veya argparse
- 29. tarih kriterler kullanılarak sıralı bir bayrak oluşturma
- 30. g ++ -std = C++ 11, bayrak etkili olmayacak
Burada bayraklarım yok (VALUE_TO_CHECK gibi). Bazı bayraklar içeren başka bir değişkenim var. bu yüzden A'yı bulmalıyım. Tüm bayraklar cadı B'de mevcut olsun veya olmasın. – Nagaraju
@Naga raju lütfen sorunuza cevap verin. – EJP
Bir grup bayrak ayarlanmış bir değeriniz varsa: 'int A = flag1 | flag3 | flag15; 've tüm değerlerin B''den mi olduğunu görmek istersiniz: int B = flag3 | flag15; ', sonra yukarıdaki kodda B' _is_' VALUE_TO_CHECK': 'if (A & B == B)' (korkunç değişken isimlerini dikkate almazsak). Ayrıca, bunun kafanız karışmış gibi göründüğünden, trashgod'un cevabını referans almalı ve başvurulan kitabı satın almalısınız (Josh Bloch tarafından). Java geliştiricisi olarak sahip olmak için en iyi kitap. – pickypg