2009-03-15 16 views

उत्तर

12

Bitwise AND। इस मामले में, जांचें कि i में अंतिम बिट सेट है या नहीं। यदि ऐसा है, तो यह एक अजीब संख्या होनी चाहिए क्योंकि अंतिम बिट 1 का प्रतिनिधित्व करता है और अन्य सभी बिट्स भी संख्याओं का प्रतिनिधित्व करते हैं।

2

यह जांच रहा है कि आखिरी बिट चालू है (जो इसे अजीब बनाता है)। ध्यान दें कि विशेष रूप से linq के लिए नहीं है, आप इसे एसक्यूएल या सी # कोड पर कर सकते हैं।

4

'&' bitwise and operator है। & '1 के साथ आईएनजी अन्य सभी बाइनरी अंकों को हटा देता है, अगर 0 नंबर छोड़ देता है, तो 1 अगर यह अजीब है।

यह हैकर का ऐसा करने का तरीका है। गणितज्ञ निश्चित रूप से लिखेंगे ((i% 2) == 1) इसके बजाय, modulo 2 arithmetic का उपयोग करके! जबकि एक सॉफ्टवेयर इंजीनियर लिखेंगे! IsEven (i), लाइब्रेरी फ़ंक्शन का पुन: उपयोग करना और पुन: उपयोग ब्राउनी पॉइंट अर्जित करना ... :-)

अब, इनमें से कोई भी अधिक कुशल है कंपाइलर और सीएलआर पर निर्भर करता है - और इस मामले में, जो LINQ अभिव्यक्ति वृक्ष को संभालने के लिए मिलता है, और वह प्राप्तकर्ता किससे निपटने के लिए तैयार होता है।

+0

मुझे विश्वास है कि ऑपरेशन तकनीकी रूप से सबसे कुशल होगा। –

+0

भी सुनिश्चित न करें। कंपाइलर और आईएल जेआईटी निष्पादक की कल्पना की तुलना में स्वतंत्रता की अधिक डिग्री है ... –

+0

एक सॉफ्टवेयर इंजीनियर जो स्पष्ट और terse C# के लिए विस्तार विधियों का उपयोग करना पसंद करता है I.IsNotEven() लिख सकता है। –

4

& थोड़ा सा और ऑपरेटर है, और एक द्विआधारी प्रणाली में मौलिक संचालन में से एक है।

और इसका अर्थ है 'यदि दोनों ए और बी चालू हैं'। असली दुनिया का उदाहरण श्रृंखला में दो स्विच है। वर्तमान केवल तभी पारित होगा जब दोनों वर्तमान के माध्यम से अनुमति दे रहे हों।

कंप्यूटर में, ये भौतिक स्विच नहीं हैं लेकिन सेमीकंडक्टर्स हैं, और उनकी कार्यक्षमता को logic gates कहा जाता है। वे स्विच के रूप में चीजों के समान प्रकार करते हैं - वर्तमान या कोई वर्तमान पर प्रतिक्रिया।

पूर्णांक पर लागू होने पर, एक संख्या में प्रत्येक बिट को दूसरे नंबर पर प्रत्येक बिट के साथ जोड़ा जाता है। तो bitwise ऑपरेटर को समझने के लिए, और आपको संख्याओं को बाइनरी में परिवर्तित करने की आवश्यकता है, फिर मिलान करने वाली बिट्स की प्रत्येक जोड़ी पर और ऑपरेशन करें।

है यही कारण है कि:

00011011 (odd number) 
AND 
00000001 (& 1) 
== 
00000001 (results in 1) 

जबकि

00011010 (even number) 
AND 
00000001 (& 1) 
== 
00000000 (results in 0) 

(& 1) आपरेशन इसलिए 1 करने के लिए राइट सबसे बिट तुलना का उपयोग कर AND तर्क। अन्य सभी बिट्स को प्रभावी रूप से अनदेखा कर दिया जाता है क्योंकि कुछ भी और कुछ भी नहीं है।

यह जांचने के बराबर है कि संख्या एक विषम संख्या है (सभी विषम संख्याओं में दाएं-बराबर 1 के बराबर है)।

उपरोक्त को उसी उत्तर से अनुकूलित किया गया है जिसे मैंने this question पर लिखा था।

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