7

मैं आज एक वीडियो देखा और वीडियो में पुरुष में कुछ कर रही सिर्फ इस बारे में समझने के लिए एक नंबर भी है या नहीं:एक असामान्य लेकिन कारगर तरीका

number/2*2 == number ? true : false ; 

मैं इसे करने की कोशिश की जब मैं घर गया और

number>>1<<1 == number ? true : false; 

इस टी: तो मैं के रूप में पहले एक बदल

number % 2 == 0 ? true : false ; 

के साथ तुलना में दूसरा एक तेज थी ime दाएं को एक बार दाएं स्थानांतरित करना और एक बार छोड़ने के लिए तेज़ी से काम करना: डी 1 और 1000000000 के बीच सभी संख्या की पहचान के लिए प्रदर्शन अंतर 0-1 सेकेंड बड़ा नहीं है, लेकिन मुझे यह बहुत पसंद आया और ऐसी चाल सुनना चाहता था आप से।

तो और क्या? =)

और रसेल Borogove से एक और विचार =)

(number&1) == 0; 

परिणाम:

समय के साथ बीत चुके और ऑपरेशन: 00: 00: 00: 00 ०७.०५,०४,०३३
समय शिफ्ट ऑपरेशन के साथ बीत चुके: 06. मॉड ऑपरेशन के साथ समय समाप्त हो गया: 00: 00: 06.8323908

आश्चर्यजनक रूप से दो बार स्थानांतरित करना मेरे कंप्यूटर पर एक और ऑपरेशन से तेज़ी से काम कर रहा है।

+2

'भी = (संख्या और 1) == 0' के साथ क्या गलत है? –

उत्तर

7

एमआईटी वास्तव में ऐसी चीजों की सूची रखता है, एचकेएमईएम, जो http://www.inwap.com/pdp10/hbaker/hakmem/hakmem.html पर पाया जा सकता है। प्रोग्रामिंग से संबंधित अधिकांश लोग असेंबली भाषा में लिखे जाते हैं, लेकिन मैं समझता हूं कि उनमें से कुछ को http://graphics.stanford.edu/~seander/bithacks.html पर सी में अनुवादित किया गया है।

अब एक व्याख्यान के लिए: ये गंदे चाल तेजी से हो सकती हैं, लेकिन समझने में बहुत अधिक समय लगती है।

अधिकांश कंप्यूटिंग इतना प्रदर्शन-महत्वपूर्ण नहीं है कि इस तरह की चाल आवश्यक हैं। अजीब-यहां तक ​​कि मामले में, number % 2 == 0number/2*2 == number या number>>1<<1 == number से अधिक स्पष्ट और अधिक पठनीय है। उस ने कहा, सामान्य अनुप्रयोगों में आपको हमेशा सरल और अधिक मानक विकल्प का उपयोग करना चाहिए क्योंकि यह आपके कोड को समझने और बनाए रखने में आसान बना देगा।

हालांकि, इस तरह की चाल के लिए उपयोग के मामले हैं। विशेष रूप से बड़े पैमाने पर गणितीय या वैज्ञानिक कंप्यूटिंग और कंप्यूटर ग्राफिक्स में, इस तरह की चालें आपके जीवन को बचा सकती हैं। इसका उत्कृष्ट उदाहरण John Carmack's "magic inverse square root" क्वैक 3 में

+0

इनमें से कुछ चाल वास्तव में उपयोगी होती हैं जब आप माइक्रोकंट्रोलर के लिए असेंबली में प्रोग्रामिंग कर रहे होते हैं जब आप सीमित निर्देश सेट के साथ काम कर रहे होते हैं और केवल कई चक्रों के साथ काम करते हैं। हालांकि, उच्च स्तर की भाषाओं में, वे आम तौर पर आवश्यक नहीं होते क्योंकि कंपलर आमतौर पर उन्हें अनुकूलित करने के लिए एक अच्छी नौकरी करते हैं। –

+0

@Insilico: बिल्कुल, हालांकि वे मुख्यधारा के प्रोग्रामिंग में शायद ही कभी आवश्यक हैं। Q3 जादू वर्ग रूट के लिए –

+3

+1 :) –

1

पुस्तक Hacker's Delight पुस्तक के कुछ भी नहीं हैं लेकिन इस तरह की चीजें हैं। यह सस्ता नहीं है लेकिन यह एक बिट-ट्विडलर बाइबल है।

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