2010-11-15 17 views
14

मैंने आज बिटवाई ऑपरेटरों के बारे में पढ़ा और वे मेरे लिए आसान लगते हैं। मैंने यह भी देखा कि ऐप्पल भी उनका उपयोग करता है, उदाहरण के लिए UIViewAutoresizing के साथ।बिटवाई ऑपरेटरों के बारे में कुछ प्रश्न

मेरे ऐप में मुझे सप्ताह के सात दिनों का ट्रैक रखने की आवश्यकता है। प्रत्येक दिन या तो सक्षम या अक्षम किया जा सकता है। मैं सात BOOL की किया करते थे, लेकिन अब मैं इस के लिए एक एकल पूर्णांक उपयोग करने के लिए कोशिश कर रहा हूँ:

enum { 
    DaysMonday = 1 << 0, 
    DaysTuesday = 1 << 1, 
    DaysWednesday = 1 << 2, 
    DaysThursday = 1 << 3, 
    DaysFriday = 1 << 4, 
    DaysSaturday = 1 << 5, 
    DaysSunday = 1 << 6 
}; 
typedef NSUInteger Days; 

मेरा प्रश्न है, मैं कैसे सक्षम कर सकते हैं/अब उन मूल्यों को निष्क्रिय? मैं जानता हूँ कि मैं इस तरह एक विशिष्ट दिन के लिए एक चर days जाँच कर सकते हैं:

if (days & DaysThursday) { 
    // thursday enabled 
} 

लेकिन यह कैसे मैं ..

  1. गुरुवार सक्षम करूं?
  2. गुरुवार को अक्षम करें?
  3. टॉगल गुरुवार?
  4. सभी सक्षम करें?
  5. सभी को अक्षम करें?

धन्यवाद।

+0

मैं बस छोड़ देंगे [इस] (http://graphics.stanford.edu/~seander/bithacks.html) यहाँ। – outis

+1

हार्केन्स उन दिनों तक वापस आए जब हमने बहुत समय बिताया कि हम डेटा को कितना निचोड़ सकते हैं। 3 या 4 राज्यों के साथ चीजों के लिए दो बिट्स का उपयोग करके, इस तरह की स्थितियों को चालू/बंद करने के लिए बिटवाई ऑपरेटर। मैं अभी भी इस तरह से दुबला हूं लेकिन अब इसके बारे में और अधिक आराम कर रहा हूं कि अंतरिक्ष और बैंडविड्थ इतनी नाटकीय रूप से बढ़ी है। –

उत्तर

26

मैं उद्देश्य-सी से बहुत परिचित नहीं हूं, लेकिन बिटवाई ऑपरेटरों से निपटने के दौरान मूल बातें यहां दी गई हैं।

सक्षम गुरुवार

days = days | DaysThursday; 

अक्षम गुरुवार

allDays = DaysMonday | DaysTuesday | ... | DaysSunday; 
days = days & (allDays^DaysThursday); 
// OR 
days = days & ~DaysThursday; 

टॉगल गुरुवार

days = days^DaysThursday; 

सभी

allDays = DaysMonday | DaysTuesday | ... | DaysSunday; 
days = days | allDays; 
// OR 
days = allDays; 
सक्षम करें

सभी अक्षम करें

days = days^days; 
// OR 
days = 0; 
+0

धन्यवाद। मैंने कुछ और जोड़ा, क्या आप एक नज़र डाल सकते हैं? – Rits

+1

सभी को सक्षम करें और सभी उत्तरों को अक्षम करें। –

+0

'गुरुवार को अक्षम' नहीं होगा इस तरह बेहतर होगा ?: दिन = दिन और! दिन का दिन; – v01d

3
days = DaysMonday | DaysWednesday | DaysFriday | DaysSaturday; 
days = days | DaysThursday; 
days = days & ~DaysSaturday; 
संबंधित मुद्दे