मुझे लगता है कि आप अपने आप को सरणियों और संख्याओं के बीच उलझन में मिल गया है, विशेष रूप से क्या यह द्विआधारी संख्या में हेरफेर करने का मतलब है।
मैं उदाहरण के लिए इसके बारे में जाऊंगा। मान लें कि आपके पास कई त्रुटि संदेश हैं और आप उन्हें फ़ंक्शन से रिटर्न वैल्यू में वापस करना चाहते हैं। अब, आप अपनी त्रुटियों को 1,2,3,4 लेबल कर सकते हैं ... जो आपके दिमाग को समझ में आता है, लेकिन फिर आप केवल एक नंबर के साथ कैसे काम करते हैं, यह पता लगाना कि कौन सी त्रुटियां हुई हैं?
अब, त्रुटियों को लेबल करने का प्रयास करें 1,2,4,8,16 ... मूल रूप से दो की शक्तियां बढ़ाना। यह क्यों काम करता है? खैर, जब आप बेस 2 पर काम करते हैं तो आप 00000000
जैसे नंबर को जोड़ रहे हैं, जहां प्रत्येक अंक दाईं ओर से अपनी स्थिति से 2 गुणा की शक्ति से मेल खाता है। तो मान लें कि त्रुटियां 1, 4 और 8 होती हैं। खैर, तो इसे 00001101
के रूप में प्रदर्शित किया जा सकता है। विपरीत में, पहला अंक = 1 * 2^0, तीसरा अंक 1 * 2^2 और चौथा अंक 1 * 2^3। उन्हें सब कुछ जोड़ना आपको 13.
अब, हम परीक्षण करने में सक्षम हैं कि बिटमैस्क लागू करके ऐसी कोई त्रुटि हुई है या नहीं। उदाहरण के लिए, अगर आप काम करना चाहते हैं तो त्रुटि 8
हुई है, तो 8 = 00001000
के बिट प्रतिनिधित्व का उपयोग करें। - काम कर रहा अंकों के लिहाज से
00001101
& 00001000
= 00001000
मुझे यकीन है कि आप जानते हैं कि कैसे एक और काम करता है या ऊपर से यह अनुमान लगा सकते हैं कर रहा हूँ: अब, आदेश निकालने के लिए किया जाए या नहीं है कि त्रुटि हुई है, एक द्विआधारी और इतने की तरह उपयोग करें , यदि कोई दो अंक दोनों 1 कर रहे हैं, परिणाम 1 है, वरना यह 0.
अब है, C:
int func(...)
{
int retval = 0;
if (sometestthatmeans an error)
{
retval += 1;
}
if (sometestthatmeans an error)
{
retval += 2;
}
return retval
}
int anotherfunc(...)
{
uint8_t x = func(...)
/* binary and with 8 and shift 3 plaes to the right
* so that the resultant expression is either 1 or 0 */
if (((x & 0x08) >> 3) == 1)
{
/* that error occurred */
}
}
अब, चलन है। जब स्मृति स्पैस थी और प्रोटोकॉल में वर्बोज़ एक्सएमएल इत्यादि की लक्जरी नहीं थी, तो इतने सारे बिट्स के रूप में एक क्षेत्र को सीमित करना आम था। उस क्षेत्र में, आप एक निश्चित अर्थ के लिए विभिन्न बिट्स (झंडे, 2 की शक्तियां) असाइन करते हैं और यदि वे सेट हैं तो कटौती करने के लिए बाइनरी ऑपरेशंस लागू करते हैं, फिर इन पर काम करें।
मुझे यह भी जोड़ना चाहिए कि बाइनरी ऑपरेशंस कंप्यूटर के अंतर्निहित इलेक्ट्रॉनिक्स के विचार में नज़दीक हैं। कल्पना करें कि क्या बिट फ़ील्ड विभिन्न सर्किट (वर्तमान या नहीं ले जाने) के आउटपुट से मेल खाते हैं। कहा सर्किट के पर्याप्त संयोजनों का उपयोग करके, आप ... एक कंप्यूटर बनाते हैं।
बीटीडब्ल्यू, यह एक ऐसा क्षेत्र है जहां सी/सी ++ काम नहीं करता है। सी ++ में थोड़ा वैक्टर हैं और सी नहीं है। सी में आपको अपना खुद लिखना होगा। कृपया सी/सी ++ को सी या सी ++ में अलग करने की आदत प्राप्त करें। –