मैंने इसे दो बार देखा है, लेकिन ऐसा लगता है कि बिटवाई शिफ्ट का उपयोग करके पठनीयता में बाधा आती है। इसका उपयोग क्यों किया जाता है? क्या यह सिर्फ 2 से गुणा करने से तेज़ है?क्या '* 2' के बजाय '<< 1' का उपयोग करने का कोई फायदा है?
उत्तर
यह पुराने कंपाइलर्स पर तेज़ है जो बाएं शिफ्ट निर्देश उत्सर्जित करके * 2 कॉल को अनुकूलित नहीं करते हैं। यह अनुकूलन वास्तव में पहचानना आसान है और कोई भी सभ्य संकलक पहले से ही करता है।
यदि यह पठनीयता को प्रभावित करता है, तो इसका उपयोग न करें। सबसे पहले अपने कोड को सबसे स्पष्ट और संक्षिप्त फैशन में पहले लिखें, फिर यदि आपके पास गति की समस्याएं वापस आती हैं और प्रोफ़ाइल होती हैं और हाथ अनुकूलन करती हैं।
कुछ आर्किटेक्चर के लिए, बिट स्थानांतरण गुणा करने से तेज़ है। हालांकि, इसके नमक के किसी भी कंपाइलर को बाएं बिट शिफ्ट (* थोड़ी सी शिफ्ट तेज होने पर) 2 * (या 2 की शक्ति द्वारा किसी भी गुणा द्वारा अनुकूलित) अनुकूलित किया जाएगा।
यदि आप पुराने सी कंपाइलर का उपयोग कर रहे हैं, तो यह bitwise का उपयोग करने के लिए प्राथमिक है। पठनीयता के लिए आप हालांकि कोड टिप्पणी कर सकते हैं।
जब आप गुणा कर रहे हों, और < < जब आप थोड़ा स्थानांतरित हो रहे हैं तो आपको * का उपयोग करना चाहिए। वे गणितीय रूप से समकक्ष हैं, लेकिन अलग-अलग अर्थपूर्ण अर्थ हैं। यदि आप ध्वज फ़ील्ड बना रहे हैं, उदाहरण के लिए, बिट स्थानांतरण का उपयोग करें। यदि आप कुल गणना कर रहे हैं, तो गुणा का उपयोग करें।
बहुत अच्छा बिंदु। यदि आप बिट्स को एक स्थान बाईं ओर ले जाना चाहते हैं, तो '<< 1' का उपयोग करें। यदि आप संख्या को दो बार बड़ा बनाना चाहते हैं, तो '* 2' का उपयोग करें। वही प्रभाव, लेकिन आप जो संख्या का उपयोग कर रहे हैं उससे बहुत स्पष्ट है। – nickf
+1। अपने कोड में अपना ** इरादा ** व्यक्त करें, दूसरे को संकलक अनुमान लगाने की कोशिश न करें (जब तक आप कोड को प्रोफाइल नहीं करते हैं और यह निर्धारित करते हैं कि यह एक तरीका है या दूसरा प्रदर्शन में महत्वपूर्ण अंतर बनाता है)। –
इसका उपयोग तब किया जाता है जब आप उस डेटा के व्यक्तिगत बिट्स से चिंतित होते हैं जिसके साथ आप काम कर रहे हैं। उदाहरण के लिए, आप 0x9A
के लिए एक शब्द के ऊपरी बाइट सेट करना चाहते हैं, आपके द्वारा लिखी नहीं होता
n |= 0x9A * 256
आप लिखना चाहते हैं:
n |= 0x9A << 8
यह यह स्पष्ट है कि आप के साथ काम कर रहे हैं बनाता है बिट्स, उनके द्वारा प्रतिनिधित्व किए गए डेटा के बजाए।
bitfields के रूप में इस्तेमाल मूल्यों की पठनीयता के लिए:
enum Flags { UP = (1<<0),
DOWN = (1<<1),
STRANGE = (1<<2),
CHARM = (1<<3),
...
जो मुझे लगता है कि या तो '= 1, ..., = 2, ... = 4' या '= 1 बेहतर है, .. = = 2, = 2 * 2, ... = 2 * 3 'विशेष रूप से यदि आपके पास 8+ झंडे हैं।
- 1. Inumerable <T> पर सूची <T> का उपयोग करने का क्या फायदा है?
- 2. क्या ऑब्जेक्ट इनिशिलाइज़र का उपयोग करने का कोई फायदा है?
- 3. क्या पाइथन कक्षा का उपयोग करने में कोई फायदा है?
- 4. PHP में <<< ईओडी का उपयोग क्या है?
- 5. सी ++ में, जो तेज़ है? (2 * i + 1) या (i << 1 | 1)?
- 6. <? के बजाय php <?
- 7. जेएसएफ में, क्या <h:form> एस को विभाजित करने का कोई फायदा है?
- 8. "लिंक के रूप में जोड़ें" का उपयोग करने के बजाय पोर्टेबल क्लास लाइब्रेरी का उपयोग करने का क्या फायदा है?
- 9. पायथन वर्चुअलबॉक्स एपीआई का उपयोग करने का क्या फायदा है?
- 10. जावा में, बिट्सफिफ्ट का उपयोग करते समय, 1 << 32! = 1 << 31 << 1 क्यों होता है?
- 11. इंटरलाक्ड क्लास का उपयोग करने के विपरीत अस्थिर कीवर्ड का उपयोग करने का कोई फायदा है?
- 12. सादा स्ट्रिंग के बजाय ऑब्जेक्टआईडी का उपयोग करने का क्या फायदा है?
- 13. क्या ऑब्जेक्ट पर संपत्ति घोषित करने के बजाए प्रोटोटाइप का उपयोग करने का कोई फायदा है?
- 14. क्या सिंगल-कैरेक्टर वैल्यू के लिए स्ट्रिंग के बजाय char का उपयोग करने का कोई फायदा है?
- 15. टेक्स्टबॉक्स पर RichTextBox का उपयोग करने का क्या फायदा है?
- 16. क्या निश्चित आकार वाले (int64_t, int32_t) के बजाय गैर-निश्चित पूर्णांक (int, long) का उपयोग करने का कोई फायदा है?
- 17. बॉर्न शेल में "2 <& 1" रीडायरेक्ट क्या करता है?
- 18. सी # क्या अब सूची <T> की बजाय ArrayList का उपयोग करने का कोई कारण है?
- 19. "<<<" ऑपरेटर का नाम क्या है?
- 20. क्या सीएसएस में बहुत विशिष्ट चयनकर्ताओं का उपयोग करने का कोई फायदा है?
- 21. क्या PHP में पहले शून्य का उपयोग करने का कोई फायदा है?
- 22. क्या एमवीसी में एचटीएमएलहेल्पर का उपयोग करने का कोई फायदा है?
- 23. क्या जेएसपी टैग में <rtexprvalue> झूठी</ rtexprvalue> का उपयोग करने का कोई अच्छा कारण है?
- 24. <% "का अर्थ क्या है: <% = और <% = में क्या अंतर है?
- 25. क्या रिटर्न स्टेटमेंट का उपयोग करने का कोई फायदा है जो कुछ भी नहीं देता है?
- 26. क्या हर समय static_cast <int> का उपयोग करने का कोई विकल्प है?
- 27. <% $, <% @, <% =, <% # ... सौदा क्या है?
- 28. PHP क्या <<< मतलब है?
- 29. क्या पी (एक <= एक्स <= बी) प्रदर्शित करने के लिए अभिव्यक्ति() प्राप्त करने का कोई तरीका है?
- 30. क्या रूबी में << ऑपरेटर को ओवरराइड करने का कोई तरीका है?
यह परीक्षण करना आसान है। बस इसका परीक्षण करें। –
कैसे? 'समय' का उपयोग करके? –