2012-07-16 15 views
9

कुछ एक और डेवलपर द्वारा लिखे कोड को देखते हुए की अजीब उपयोग, मैं इस में आए । वैकल्पिक रंग ठीक काम करते हैं।को अदल-तालिका पंक्ति शैलियों बिटवाइज़ ऑपरेटर

अगर मैं इसे लिख रहा था, तो मैं bitwise() ऑपरेटर के बजाय मॉड्यूलस ऑपरेटर (%) का उपयोग करता।

इस मामले में bitwise ऑपरेटर क्यों काम करता है? मॉड्यूलस ऑपरेटर की बजाय इस विधि का उपयोग करने का कोई फायदा है?

+1

कि वास्तव में है इस ऑपरेशन को करने के लिए काफी अच्छा तरीका है। मुझे पसंद है। – KingCronus

उत्तर

9

& ऑपरेटर संख्या पर थोड़ा सा तुलना करता है। तो अगर आप कर

$i & 1

यह तो आप अगर '1' ध्वज सेट है, इस तरह के द्विआधारी के रूप में बता देंगे:

001010111010

पिछले संख्या '1' झंडा है (याद रखें, बाइनरी 1, 2, 4, 8 इत्यादि रिवर्स ऑर्डर में जाती है), जो इस मामले में 0

से 1 बाइनरी में एकमात्र अजीब झंडा है, यह आपको बताएगा कि संख्या क्या है विषम या सम।

यदि $ i उदाहरण के लिए 3 है, तो बाइनरी में यह 011 होगा - अंतिम संख्या 1 (1 ध्वज) है और इस प्रकार $i & 1 सत्य होगा।

यदि $ i उदाहरण के लिए 4 है, तो बाइनरी में यह 100 होगा - अंतिम संख्या 0 (1 ध्वज) है और इस प्रकार $i & 1 गलत होगा।

+0

आपके उत्तर के लिए धन्यवाद, यह अब समझ में आता है :) – psynnott

4

यह काम करता है क्योंकि पहली बिट हमेशा 1 होती है यदि संख्या विषम है और 0 यदि संख्या भी है।

1 
10 
11 
100 
101 
110 
111 
etc. 

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

क्यों अन्य डेवलपर यह प्रयोग किया जाता है, हम केवल अनुमान लगा सकते हैं: आदत से बाहर है, कहीं से कॉपी-पेस्ट किया था, मापांक ऑपरेटर,, दिखावा अनुकूलन करने के लिए चाहते हैं के बारे में पता नहीं है ...

+2

मैंने बिटुलस बनाम मॉड्यूलस बनाम बेंचमार्क किया, मॉड्यूलस थोड़ा तेज (0.035%) है, इसलिए यह लगभग महत्वहीन है लेकिन अभी भी थोड़ा तेज़ है। हो सकता है कि मॉड्यूलस ऑपरेटर के लिए कुछ अनुकूलन हैं, मुझे वास्तव में कोई जानकारी नहीं है, लेकिन ऐसा लगता है कि मॉड्यूलस और बिटवाई तुलना तुलना पर्याप्त अच्छे समाधान दोनों हैं। फिर भी, महान जवाब, +1। –

+0

आपके उत्तर के लिए धन्यवाद – psynnott

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