बिट ऑपरेटर किसके लिए अच्छे हैं? [बन्द है]


19

प्रोग्रामिंग भाषाओं में अक्सर विभिन्न बिट ऑपरेटर आते हैं (जैसे कि बिटवाइज़ लेफ्ट- और राइट शिफ्ट, बिटवाइज़ एंड, या, एक्सओआर ...)। ये बहुत अधिक उपयोग नहीं किए जाते हैं, या कम से कम ऐसा मेरा अनुभव रहा है। वे कभी-कभी प्रोग्रामिंग चुनौतियों या साक्षात्कार प्रश्नों में उपयोग किए जाते हैं, या समाधान जांघ की आवश्यकता होती है, जैसे:

  • किसी भी समानता ऑपरेटर का उपयोग किए बिना, एक फ़ंक्शन बनाएं जो trueदो मानों के बराबर होने पर वापस लौटता है
  • तीसरे चर का उपयोग किए बिना, दो चर का मान स्वैप करें

ये फिर से, शायद कुछ वास्तविक दुनिया का उपयोग करता है। मुझे लगता है कि उन्हें तेज होना चाहिए क्योंकि वे सीधे कम स्तर पर मेमोरी में हेरफेर करते हैं।

अधिकांश प्रोग्रामिंग भाषाओं में ऐसे क्यों पाए जाते हैं? किसी भी वास्तविक दुनिया मामलों का उपयोग करें?


@Anto - एक आसान उदाहरण एक ग्राहक (एक समय 4096 बाइट्स) पर 256 शब्द की दर से 256Kb डेटा भेजना होगा।
रामहुंड

1
"किसी भी समानता ऑपरेटर का उपयोग किए बिना, एक ऐसा फ़ंक्शन बनाएं जो दो मानों के बराबर होने पर सच हो" - सी में return !(x-y);:? मुझे पता नहीं
एंड्रयू अर्नाल्ड

@ और: यह एक समाधान है, लेकिन आप इसे बिटवाइज़ ऑपरेटरों के साथ भी कर सकते हैं।
Anto

19
"ये बहुत ज्यादा उपयोग नहीं किए जाते हैं" - इसके बारे में निश्चित है? मैं हर समय उनका उपयोग करता हूं। हम आपकी समस्या डोमेन में काम नहीं करते हैं।
एड एस।

2
एक पूर्ण उत्तर के लिए पर्याप्त नहीं है, लेकिन एक बिट के शीर्ष 4 बिट्स को बिना किसी फिडिंग के पढ़ने की कोशिश करें और फिर विचार करें कि कुछ डेटा प्रारूप बहुत कसकर पैक किए गए हैं।
ब्रेंडन लॉन्ग अप

जवाबों:


53

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

इनका उपयोग किया जाता है

  • प्रोग्रामिंग भाषाओं के डेटा प्रकारों में फिट नहीं होने वाले बाइट्स के जुग्लिंग ब्लॉक
  • एन्कोडिंग को आगे और पीछे बड़े से छोटे एंडियन में बदलना।
  • कुछ सीरियल या यूएसबी कनेक्शन के लिए 3 बाइट्स में डेटा के 4 6bit टुकड़े पैकिंग
  • कई छवि प्रारूपों में प्रत्येक रंग चैनल को निर्दिष्ट बिट्स की मात्रा भिन्न होती है।
  • एम्बेडेड अनुप्रयोगों में IO पिन को शामिल करने वाली कोई भी चीज़
  • डेटा संपीड़न, जिसमें अक्सर डेटा अच्छा 8-बिट सीमाओं के लायक नहीं होता है। "
  • हैशिंग एल्गोरिदम, सीआरसी या अन्य डेटा अखंडता जांच।
  • एन्क्रिप्शन
  • Psuedorandom संख्या पीढ़ी
  • RAID 5 समता की गणना करने के लिए संस्करणों के बीच बिटवाइड XOR का उपयोग करता है।
  • टन अधिक

वास्तव में, तार्किक रूप से, कंप्यूटर पर सभी ऑपरेशन अंततः इन निम्न स्तरीय बिटवाइज़ संचालन के संयोजनों को उबालते हैं, जो प्रोसेसर के विद्युत द्वार के भीतर होता है।


1
+1 आपकी विस्तृत सूची के लिए, जिसे आप भी जोड़ते दिखते हैं
Anto

28
+1। @ एंटो: यह सूची व्यापक के पास नहीं है । सिस्टम प्रोग्रामिंग में बिटवाइज़ ऑपरेटरों के लिए उपयोग के मामलों की एक व्यापक सूची व्यावसायिक अनुप्रयोगों में एसक्यूएल प्रश्नों के लिए एक व्यापक सूची के रूप में लंबी होगी। मजेदार तथ्य: मैं हर समय बिटवाइज़ ऑपरेशंस का उपयोग करता हूं, लेकिन वर्षों में एसक्यूएल स्टेटमेंट नहीं लिखा है ;-)
nikie

4
@ मिक्की: और मैं हर समय SQL लिखता हूँ, लेकिन वर्षों में बिटवाइज़ ऑपरेटरों का उपयोग नहीं किया है! :)
१er:

3
मैं एम्बेडेड सिस्टम में काम करता हूं - बिटवाइज़ ऑपरेटर रोटी और मक्खन सामान हैं। बिना किसी विचार के हर रोज इस्तेमाल किया जाता है।
जल्दी_अगला

9
यदि मैं कभी-कभी SQL में बिटशफ्टिंग का उपयोग करता हूं, तो क्या मुझे पुरस्कार मिलेगा?
चींटी

13

क्योंकि वे मौलिक ऑपरेशन हैं।

विचार की एक ही पंक्ति से, आप तर्क कर सकते हैं कि इसके अलावा कुछ वास्तविक दुनिया उपयोग करता है, क्योंकि इसे पूरी तरह से घटाव (और नकारात्मकता) और गुणा के साथ बदला जा सकता है। लेकिन हम जोड़-तोड़ करते हैं क्योंकि यह एक मौलिक ऑपरेशन है।

और एक पल के लिए मत सोचिए कि सिर्फ इसलिए कि आपने बिटवाइज़ ऑपरेशन्स की बहुत ज़रूरत नहीं देखी है, इसका मतलब यह नहीं है कि वे बहुत बार उपयोग नहीं किए जाते हैं। वास्तव में, मैंने लगभग हर भाषा में बिटकॉइन ऑप्स का उपयोग किया है जो मैंने बिट मास्किंग जैसी चीजों के लिए उपयोग किया है।

मेरे सिर के ऊपर से, मैंने इमेज प्रोसेसिंग, बिटफिल्ड और झंडे, टेक्स्ट प्रोसेसिंग के लिए बिटवाइज़ ऑप्स का उपयोग किया है (उदाहरण के लिए, एक विशेष वर्ग के सभी वर्ण अक्सर एक आम बिट पैटर्न साझा करते हैं), एन्कोडिंग और क्रमबद्ध डेटा को डिकोड करते हुए, वीएम या सीपीयू को डिकोड करते हैं। opcodes, और इतने पर। बिटवाइज़ ऑप्स के बिना, इनमें से अधिकांश कार्यों को कार्य को कम मज़बूती से या खराब पठनीयता के साथ करने के लिए कई गुना अधिक जटिल संचालन की आवश्यकता होगी।

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

// Given a 30-bit RGB color value as a 32-bit int
// A lot of image sensors spit out 10- or 12-bit data
// and some LVDS panels have a 10- or 12-bit format
b = (color & 0x000003ff);
g = (color & 0x000ffc00) >> 10;
r = (color & 0x3ff00000) >> 20;

// Going the other way:
color = ((r << 20) & 0x3ff00000) | ((g << 10) & 0x000ffc00) | (b & 0x000003ff);

RISC- टाइप CPUs के लिए CPU निर्देशों को डिकोड करना (जैसे कि किसी अन्य प्लेटफॉर्म का अनुकरण करते समय) ऊपर के रूप में एक बड़े मूल्य के हिस्से को निकालने की आवश्यकता होती है। कभी-कभी, गुणा और भाग और मोडुलो इत्यादि के साथ इन ऑपरेशनों को करना, बिटकॉइन ऑप्स के बराबर दस गुना धीमा हो सकता है।


12

एक विशिष्ट उदाहरण 24 बिट आरजीबी मूल्य और पीठ से अलग-अलग रंगों को निकाल रहा है।


EDIT: http://www.docjar.com/html/api/java/awt/Color.java.html से

    value =  ((int)(frgbvalue[2]*255 + 0.5))    |
                (((int)(frgbvalue[1]*255 + 0.5)) << 8 )  |
                (((int)(frgbvalue[0]*255 + 0.5)) << 16 ) |
                (((int)(falpha*255 + 0.5)) << 24 );

व्यवहार में इस उदाहरण को दिखाएं? एक कोड स्निपेट?
Anto

एक बेहतर उदाहरण 16-बिट (4.5bpc) या 30-बिट (10bpc) RGB मानों को संसाधित करना हो सकता है।
ग्रेफेड

@ ग्रे, ऐसे उदाहरणों को जोड़ने के लिए स्वतंत्र महसूस करें।

6

यहाँ एक वास्तविक दुनिया उदाहरण है जो आपको Quake 3, Quake 4. Doom III में मिलेगा। उन सभी खेलों में जिन्होंने Q3 इंजन का उपयोग किया था

float Q_rsqrt( float number )
{
        long i;
        float x2, y;
        const float threehalfs = 1.5F;

        x2 = number * 0.5F;
        y  = number;
        i  = * ( long * ) &y;                       // evil floating point bit level hacking [sic]
        i  = 0x5f3759df - ( i >> 1 );               // what the fuck? [sic]
        y  = * ( float * ) &i;
        y  = y * ( threehalfs - ( x2 * y * y ) );   // 1st iteration
//    y  = y * ( threehalfs - ( x2 * y * y ) );   // 2nd iteration, this can be removed

        return y;
}

(उस कोड को समझने के लिए आपको यह समझने की आवश्यकता है कि फ़्लोटिंग पॉइंट नंबर कैसे संग्रहीत किए जाते हैं, मैं निश्चित रूप से उस पर विस्तृत नहीं कर सकता)

उपयोग के संदर्भ में, जब तक आप उन क्षेत्रों में नहीं होते हैं, जिनमें नेटवर्किंग या ग्राफिक्स जैसे बिट शिफ्टिंग की आवश्यकता होती है, तो आपको उनका उद्देश्य थोड़ा अकादमिक लग सकता है। लेकिन अभी भी दिलचस्प (मेरे लिए कम से कम)।


+1 उन टिप्पणियों के लिए, भले ही वे आपकी न हों। मुझे चकला बना दिया।
बेसिनेटर

4

शिफ्टिंग दो की शक्ति से गुणा या विभाजित करने से तेज है। उदाहरण के लिए, एक << = 2 एक से 4 गुणा। इसके विपरीत, एक >> = 2 एक चार से विभाजित करता है। बिट-वार ऑपरेटर्स का उपयोग करके डिवाइस में डेटा को बिट-बैंग भी किया जा सकता है। उदाहरण के लिए, हम शिफ्ट, xor और "और" एन लूप के अंदर के संचालन का उपयोग करके एक एन पिन पोर्ट से एन सीरियल डेटा स्ट्रीम भेज सकते हैं। कुछ भी जो डिजिटल लॉजिक में पूरा किया जा सकता है, सॉफ्टवेयर और वाइस वर्सा पर भी पूरा किया जा सकता है।


1
बस ऊपर या नीचे चक्कर लगाते समय सावधानी बरतें आदि। शिफ्टिंग में इसका कोई हिसाब नहीं है, इसलिए मैंने पाया है कि कोड में डिवाइड का उपयोग करने के लिए वास्तव में बेहतर अभ्यास है जब मेरा मतलब डिवाइड होता है और कंपाइलर इसे एक शिफ्ट में ऑप्टिमाइज़ करते हैं और जोड़ते हैं मेरे लिए।
डेमिन

@ डैमिन: जब मैं इस तकनीक का उपयोग करता हूं तो मैं पूर्णांकों के साथ काम कर रहा हूं। C और C ++ में पूर्णांक विभाजन के लिए डिफ़ॉल्ट व्यवहार शून्य की ओर छंटनी है; इसलिए, एक पूर्णांक को दो की शक्ति से दाएं स्थानांतरित करने से दो की शक्ति द्वारा पूर्णांक को विभाजित करने के समान परिणाम उत्पन्न होता है।
बिट-ट्विडलर

1
@ बिट-ट्विडलर राइट शिफ्ट नकारात्मक संख्याओं के विभाजन के समान काम नहीं करता है।
डेमिन

@ डैमिन: तुम मुझे गलत साबित करने पर तुली हुई हो। सबसे पहले, आप गोलाई समस्या को फेंक देते हैं। जब मैं उस विभाजन को C और C ++ में उस भाग को शून्य की ओर बताते हुए दावा करता हूं, तो आपने हस्ताक्षरित पूर्णांक समस्या को निकाल दिया। मैंने कहां से कहा कि मैं शिफ्ट ऑपरेटर को दो पूरक नकारात्मक पूर्णांक पर हस्ताक्षर करने के लिए आवेदन कर रहा था? उस के साथ, एक अभी भी दो की शक्ति से विभाजित करने के लिए पारी ऑपरेटर का उपयोग कर सकते हैं। हालाँकि, क्योंकि C और C ++ प्रदर्शन करते हैं और समतल पुरानी दाहिनी पारी के बजाय अंकगणितीय सही बदलाव, किसी को पहले यह देखने के लिए देखना चाहिए कि क्या मूल्य नकारात्मक है। यदि मान ऋणात्मक है, तो
बिट-ट्विडलर

1
सटीक रूप से, गुणा और विभाजन के विकल्प के रूप में स्थानांतरण का उपयोग करते समय सावधान रहें क्योंकि सूक्ष्म अंतर हैं। न आधिक न कम।
डेमिन

3

बहुत पहले, बिट ऑपरेटर उपयोगी थे। आज वे इतने कम हैं। ओह, वे पूरी तरह से बेकार नहीं हैं, लेकिन यह एक लंबा समय हो गया है जब मैंने एक का उपयोग किया है जिसे इस्तेमाल किया जाना चाहिए था।

1977 में मैं एक असेंबली लैंग्वेज प्रोग्रामर था। मुझे यकीन था कि असेंबलर एकमात्र सच्ची भाषा थी। मैं निश्चित था कि पास्कल जैसी भाषा अकादमिक वेनियों के लिए थी जिन्हें कभी भी कुछ भी वास्तविक नहीं करना था ।

फिर मैंने कर्निघन और रिची द्वारा "द सी प्रोग्रामिंग लैंग्वेज" पढ़ी। इसने मेरा दिमाग पूरी तरह से बदल दिया। कारण? इसके बिट ऑपरेटर थे! यह था एक विधानसभा भाषा! यह सिर्फ एक अलग वाक्यविन्यास था।

उन दिनों में मैं बिना ands, ors, shifts, और rotates के कोड लिखने की कल्पना नहीं कर सकता था। आजकल मैं लगभग कभी भी उनका उपयोग नहीं करता।

तो, आपके प्रश्न का संक्षिप्त उत्तर है: "कुछ भी नहीं।" लेकिन यह काफी उचित नहीं है। तो लंबा जवाब है: "ज्यादातर कुछ नहीं।"


xkcd.com/378 का ख्याल आता है।
मैक्सएमपी

बिट ऑपरेटर इस दिन के लिए उपयोगी होते हैं। यह तथ्य कि आपके डोमेन में उनका उपयोग नहीं किया गया है, इसका उपयोग नहीं किया जाता है या यहां तक ​​कि बहुत बार उपयोग नहीं किया जाता है। यहां एक सरल उदाहरण दिया गया है: बिट ऑपरेटरों के बिना एईएस को लागू करने का प्रयास करें। यह एक ऐसा ऑफ-द-कफ उदाहरण है जो प्रतिदिन सैकड़ों या हजारों बार प्रतिदिन अधिकांश कंप्यूटरों में होता है।
मेरे सही विकल्प

बिट-वार ऑपरेटरों का उपयोग किए बिना डेटा को एन्कोडिंग / डिकोड करना सबसे अच्छा है। उदाहरण के लिए, किसी संदेश में MIME अटैचमेंट जोड़ने से हमें डेटा की तीन-से-चार कोडिंग (उर्फ रेडिक्स 64 कोडिंग) को संभालने में सक्षम होना पड़ता है।
बिट-टिडलर

2

एन्क्रिप्शन

मेरा सुझाव है कि डेस एन्क्रिप्शन एल्गोरिथ्म से एक बहुत छोटे स्निपेट पर एक नज़र डालें :

temp = ((left >>> 1) ^ right) & 0x55555555; right ^= temp; left ^= (temp << 1);
temp = ((right >>> 8) ^ left) & 0x00ff00ff; left ^= temp; right ^= (temp << 8);
temp = ((right >>> 2) ^ left) & 0x33333333; left ^= temp; right ^= (temp << 2);
temp = ((left >>> 16) ^ right) & 0x0000ffff; right ^= temp; left ^= (temp << 16);
temp = ((left >>> 4) ^ right) & 0x0f0f0f0f; right ^= temp; left ^= (temp << 4);

हालांकि यकीन नहीं है कि डेस इन दिनों अनुशंसित है: पी
आर्मंड

@ एलिसन: नहीं, लेकिन एन्क्रिप्शन एल्गोरिदम ने इसे बदल दिया है इसमें और भी अधिक हेरफेर संचालन शामिल है, मुझे लगता है। :-)
कार्सन63000

@ एलिसन - बेशक, लेकिन ट्रिपल डीईएस सिर्फ डेस 3 बार कुंजी बिट्स के साथ 3 बार किया जाता है।
स्कॉट व्हिटलॉक

2

बहुत सारे अच्छे उत्तर, इसलिए मैं उन उपयोगों को नहीं दोहराऊंगा।

मैं उन्हें प्रबंधित कोड (C # / .Net) में काफी उपयोग करता हूं, और यह अंतरिक्ष की बचत, उच्च प्रदर्शन या चतुर बिट शिफ्टिंग एल्गोरिदम के साथ कुछ नहीं करना है। कभी-कभी कुछ तर्क इस तरह से डेटा संग्रहीत करने के लिए उपयुक्त होते हैं। जब मैं एक एनम रखता हूं तो मैं अक्सर उनका उपयोग करता हूं लेकिन उदाहरण एक साथ उस एनम से कई मान ले सकते हैं। मैं काम से कोड का एक उदाहरण पोस्ट नहीं कर सकता, लेकिन "फ़्लैग्स एनम" ("फ्लैग्स" के लिए एक त्वरित Google एक एनुम को बिटवाइज़ तरीके से परिभाषित करने का C # तरीका है) यह अच्छा उदाहरण देता है: http: // www.dotnetperls.com/enum-flags


2

बिट समांतर कंप्यूटिंग भी है। यदि आपका डेटा केवल 1 और 0 है, तो आप उनमें से 64 को एक लंबे लंबे शब्द में पैक कर सकते हैं, और 64way समानांतर संचालन प्राप्त कर सकते हैं। जेनेटिक जानकारी दो बिट्स (डीएनए के एजीसीटी एन्कोडिंग का प्रतिनिधित्व) है, और यदि आप बिट समानांतर फैशन में विभिन्न गणना कर सकते हैं तो आप बहुत अधिक कर सकते हैं यदि आप नहीं करते हैं। स्मृति में डेटा के घनत्व का उल्लेख नहीं करने के लिए -if मेमोरी, या डिस्क क्षमता, या संचार बैंडविड्थ सीमित है इसका मतलब है कि संपीड़न / अपघटन पर विचार किया जाना चाहिए। यहां तक ​​कि कम प्रिज़नर पूर्णांक, जो छवि प्रसंस्करण जैसे क्षेत्रों में दिखाई देते हैं, ट्रिकी बिट समानांतर कंप्यूटिंग का लाभ उठा सकते हैं। यह अपने आप में एक संपूर्ण कला है।


1

वे क्यों पाए जाते हैं?

ठीक है कि शायद इसलिए कि वे विधानसभा के निर्देशों के अनुरूप हैं और कभी-कभी वे उच्च स्तरीय भाषाओं की चीजों के लिए उपयोगी होते हैं। यही बात खूंखार पर लागू होती है GOTOजो JMPविधानसभा निर्देश से मेल खाती है ।

उनके उपयोग क्या हैं?

वास्तव में नाम के लिए सिर्फ कई उपयोग हैं, इसलिए मैं अभी हाल ही में, अत्यधिक स्थानीयकृत, उपयोग करूंगा। मैं 6502 असेंबली के साथ बहुत काम करता हूं और मैं एक छोटे से एप्लिकेशन पर काम कर रहा था जो मेमोरी एड्रेस, वैल्यूज, वैल्यूज आदि को उन कोड्स में कन्वर्ट करता है, जिनका उपयोग गेमजी डिवाइस (मूल रूप से एनईएस के लिए एक धोखा एप्लीकेशन) के लिए किया जा सकता है। कोड कुछ बिट हेरफेर द्वारा बनाए जाते हैं।


1

इन दिनों कई प्रोग्रामर्स का उपयोग कंप्यूटर के साथ असीम मेमोरी के लिए किया जाता है।

लेकिन कुछ उपयोग अभी भी छोटे माइक्रोकंट्रोलर को प्रोग्राम करते हैं, जहां हर बिट गिना जाता है (जब आपके पास उदाहरण के लिए केवल 1k या उससे कम रैम है), और बिटवाइज़ ऑपरेटर प्रोग्रामर को कुछ बड़ी प्रोग्रामिंग बर्बाद करने के बजाय उन बिट्स का उपयोग करने की अनुमति देता है। एल्गोरिथ्म द्वारा आवश्यक कुछ राज्य को धारण करने के लिए अमूर्त इकाई की आवश्यकता हो सकती है। उन उपकरणों पर IO को बिटवाइज़ बेस पर पढ़ने या नियंत्रित करने की भी आवश्यकता हो सकती है।

"वास्तविक दुनिया" में सर्वर या पीसी की तुलना में उन छोटे माइक्रोकंट्रोलर की कहीं अधिक है।

शुद्ध सैद्धांतिक सीएस प्रकारों के लिए, ट्यूरिंग मशीन राज्य के बिट्स के बारे में हैं।


1

बिटकॉइन ऑपरेटरों के कई संभावित उपयोगों में से सिर्फ एक ...

बिटवाइज़ ऑपरेटर आपके कोड को अधिक पठनीय बनाने में भी मदद कर सकते हैं। निम्नलिखित फ़ंक्शन घोषणा पर विचार करें ...।

int  myFunc (bool, bool, bool, bool, bool, bool, bool, bool);

...

myFunc (false, true, false, false, false, true, true, false);

यह भूलना बहुत आसान है कि कौन से बूलियन पैरामीटर का मतलब है कि कोड लिखते या पढ़ते समय क्या होता है। अपनी गिनती का ट्रैक खोना भी आसान है। इस तरह की दिनचर्या को साफ किया जा सकता है।

/* More descriptive names than MY_FLAGx would be better */
#define MY_FLAG1    0x0001
#define MY_FLAG2    0x0002
#define MY_FLAG3    0x0004
#define MY_FLAG4    0x0008
#define MY_FLAG5    0x0010
#define MY_FLAG6    0x0020
#define MY_FLAG7    0x0040
#define MY_FLAG8    0x0080

int  myFunc (unsigned myFlags);

...

myFunc (MY_FLAG2 | MY_FLAG6 | MY_FLAG7);

अधिक विवरणात्मक ध्वज नामों के साथ, यह बहुत अधिक पठनीय हो जाता है।


1

यदि आप यूनिकोड के बारे में कुछ भी जानते हैं , तो आप शायद UTF-8 से परिचित हैं। यह 20 बिट्स कोड पॉइंट को 1 से 4 बाइट्स में पैक करने के लिए बिट टेस्ट, शिफ्ट्स और मास्क का एक गुच्छा उपयोग करता है।


0

मैं अक्सर उनका उपयोग नहीं कर रहा हूं, लेकिन कभी-कभी वे काम में आते हैं। एनम हैंडलिंग दिमाग में आता है।

उदाहरण:

enum DrawBorder{None = 0, Left = 1, Top = 2, Right = 4, Bottom = 8}

DrawBorder drawBorder = DrawBorder.Left | DrawBorder.Right;//Draw right & left border
if(drawBorder & DrawBorder.Left == DrawBorder.Left)
  //Draw the left border
if(drawBorder & DrawBorder.Top == DrawBorder.Top)
  //Draw the top border
//...

0

निश्चित नहीं है कि यह उपयोग अभी तक नोट किया गया है:

जब मैं कई रिटर्न वैल्यूज़ को 0 या 1 तक कम करने के लिए इल्लुमोस (ओपनसोलारिस) सोर्स कोड के साथ काम कर रहा हूं, तो मुझे काफी अच्छा लग रहा है।

int ret = 0;
ret |= some_function(arg, &arg2); // returns 0 or 1
ret |= some_other_function(arg, &arg2); // returns 0 or 1
return ret;
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.