2011-10-19 25 views
12

क्या कोई विधि आमतौर पर यह जांचने के लिए प्रयोग की जाती है कि एक अंतर/अन्य डेटा प्रकार में ध्वज मौजूद है या नहीं?बिटवाइज जांचें कि क्या ध्वज मौजूद है

if ((host&flagtocheckfor)==flagtocheckfor) 

कौन सा ठीक काम करता है, लेकिन यह झंडे की स्थापना के इस तरह के एक आम तरीका है इस तरह से झंडे आम तौर पर जाँच कर रहे हैं है: मैं कुछ इस तरह पता लगा? या क्या एक और संक्षिप्त विधि है?

+2

आप == flagtocheck भाग के लिए की आवश्यकता नहीं है। नतीजा और 0 या तो 0 (बिट बंद था) या गैर-0 (बिट चालू था), और कम से कम सी में, जो पहले से ही गलत और सत्य से मेल खाता है। – librik

+1

@ लिब्रिक, यह सिंगल-बिट मास्क के लिए ठीक है लेकिन कुछ मल्टीबिट हो सकते हैं। मेरा जवाब देखें – paxdiablo

उत्तर

23

यह बहुत अच्छी तरह से बिल्कुल है जो उन्हें समर्थन देने वाली अधिकांश भाषाओं में बिट फ्लैग की जांच की जाती है।

उदाहरण के लिए:

#define BIT_7 0x80 
#define BITS_0_AND_1 0x03 

if ((flag & BIT_7) == BIT_7) ... 
if ((flag & BITS_0_AND_1) == BITS_0_AND_1) ... 

आप के साथ पहले की तरह कुछ की जाँच कर सकते हैं: कि वास्तव में पल के लिए काम नहीं करेगा

if ((flag & BIT_7) != 0) ... 

के बाद से यह सच वापस आ जाएगी अगर या तो की बिट्स सेट हैं, दोनों नहीं।

flag = flag | BIT_7; // or you can also use 'flag |= BIT_7' 

आप उन लोगों के साथ साफ कर सकते हैं:

flag = flag & (~BIT_7); 

और के साथ उन्हें टॉगल:

पूर्णता के लिए, C तुम्हारे साथ बिट मास्क सेट करने देता है

flag = flag^BIT_7; 
+0

आह- अच्छा धन्यवाद, मुझे यकीन नहीं था। – ultifinitus

संबंधित मुद्दे