व्याख्या करने के लिए बिटवाइज़ ऑपरेटर कितना कठिन हैं?
मैं एम्बेडेड सिस्टम प्रोग्राम करता हूं। मैंने इस सामान का बहुत अभ्यास किया है। कोड के साथ हैश नक्शे के बारे में आपका जुड़ा हुआ प्रश्न
static int hash(int h) {
// This function ensures that hashCodes that differ only by
// constant multiples at each bit position have a bounded
// number of collisions (approximately 8 at default load factor).
h ^= (h >>> 20) ^ (h >>> 12);
return h ^ (h >>> 7) ^ (h >>> 4);
}
के रूप में लंबे समय के रूप में कोड जोर से हुक्म चलाना करने के लिए मुझे सही अर्थ बनाया। वर्णित घटनाएं bitCount
तुरंत स्पष्ट होती हैं, लेकिन यह काम करने में एक मिनट लगता है कि यह वास्तव में बिट्स क्यों गिना जाता है। टिप्पणियाँ बहुत अच्छी होंगी, हालाँकि, और यह समझना होगा कि कोड क्या हैश समस्या से थोड़ा कठिन है।
कोड को पढ़ने और समझने के बीच अंतर करना महत्वपूर्ण है। मैं bitCount
कोड की व्याख्या कर सकता हूं , और यह पढ़ सकता हूं कि यह क्या करता है, लेकिन यह साबित करता है कि यह क्यों काम करता है या यहां तक कि यह काम करता है एक मिनट लगेगा। कोड को सुचारू रूप से पढ़ने में सक्षम होने और कोड को जिस तरह से कहा जाता है, उसके कारण अंतर करने में अंतर है। कुछ एल्गोरिदम बस कठिन हैं। क्या के hash
कोड भावना बना है, लेकिन टिप्पणी समझाया क्यों क्या किया जा रहा था। यदि बिटकॉइन संचालकों को समझने में कोई फ़ंक्शन मुश्किल है, तो इसे हतोत्साहित न करें, वे अक्सर मुश्किल गणितीय सामान करने के लिए उपयोग किए जाते हैं जो कि प्रारूप में कोई फर्क नहीं पड़ता।
एक सादृश्य
मुझे इस सामान की आदत है। एक विषय जो मुझे आदत नहीं है वह है रेगेक्स। मैं उनके साथ कभी-कभार स्क्रिप्ट बनाने का काम करता हूं, लेकिन दैनिक विकास कार्यों में कभी नहीं।
मुझे पता है कि regex के निम्नलिखित तत्वों का उपयोग कैसे किया जाता है:
[]
चरित्र वर्ग
*
, .
, और +
वाइल्डकार्ड
- स्ट्रिंग की शुरुआत और स्ट्रिंग
^
का अंत$
- \ D, \ w, और \ n वर्ण वर्ग
- / जी झंडा
यह सरल प्रश्नों को शिल्प करने के लिए पर्याप्त है, और मेरे द्वारा देखे गए कई प्रश्न इससे बहुत दूर नहीं जाते हैं।
इस सूची में कुछ भी नहीं, मैं एक धोखा पत्र के लिए पहुंचता हूं। कुछ भी, कि है, को छोड़कर {}
और ()
- नकल पुस्तिकाओं के लिए पर्याप्त नहीं होगा। मुझे इन लोगों के बारे में बस इतना पता है कि मुझे एक व्हाइटबोर्ड, एक संदर्भ पुस्तिका और शायद एक सहकर्मी की आवश्यकता है। आप कुछ पागल एल्गोरिदम को रेगेक्स की कुछ छोटी लाइनों में पैक कर सकते हैं।
एक रेगेक्स को डिजाइन करने के लिए जिसे किसी भी चीज की आवश्यकता होती है या सुझाव देता है, जो कि मेरे ज्ञात तत्वों की सूची में नहीं है, मैं उन सभी वर्गों के इनपुटों की सूची बनाने जा रहा हूं, जिनकी मुझे पहचान करने और उन्हें टेस्ट सूट में रखने की उम्मीद है। मैं रेगेक्स को धीरे-धीरे और वृद्धिशील रूप से ढेर सारे रुक-रुक कर कदमों से तैयार करता जा रहा हूं, और इन चरणों को स्रोत नियंत्रण और / या एक टिप्पणी में छोड़ देता हूं ताकि मैं समझ सकूं कि बाद में क्या होना चाहिए था जब यह टूट गया। यदि यह उत्पादन कोड में है, तो मैं यह सुनिश्चित करने जा रहा हूं कि इसकी समीक्षा किसी और के अनुभव से की जाए।
क्या यह वह जगह है जहाँ आप बिटवाइज़ ऑपरेटरों के साथ हैं?
तो आप अच्छी तरह से गोल होना चाहते हैं?
मेरे अनुमान में, यदि आप यह व्याख्या करने में सक्षम हैं कि इस तरह का कोड कागज़ का एक टुकड़ा निकालकर या व्हाइटबोर्ड पर जाकर मैन्युअल रूप से संचालन के माध्यम से चलता है, तो आप अच्छी तरह से गोल के रूप में योग्य हैं। बिटवाइज़ ऑपरेशंस के क्षेत्र में एक अच्छी तरह से गोल प्रोग्रामर के रूप में अर्हता प्राप्त करने के लिए आपको चार काम करने में सक्षम होना चाहिए:
पढ़ सकते हैं और आम संचालन लिखने fluidly करने में सक्षम हो
एक आवेदन पत्र प्रोग्रामर के लिए, बिटवाइज़ ऑपरेटर्स के साथ आम आपरेशन के बुनियादी ऑपरेटरों शामिल |
और &
सेट और स्पष्ट झंडे को। यह आसान होना चाहिए। आपको सामान को पढ़ने और लिखने में सक्षम होना चाहिए
open('file', O_WRONLY | O_APPEND | O_CREAT );
// Use an OR operator ^ here and ^ here to set multiple flags
धीमा किए बिना (आप यह जानते हैं कि झंडे का मतलब क्या है )।
कुछ कार्यों के साथ अधिक जटिल संचालन को पढ़ने में सक्षम हो
। बिट्स वास्तव में तेजी से ओ (लॉग (एन)) शाखाओं के बिना समय सुनिश्चित करता है, यह सुनिश्चित करता है कि हैशकोड में टकराव की संख्या एक बंधी हुई राशि, और ईमेल पते , फोन नंबर , या पार्स करने से भिन्न हो सकती है। Regex के साथ HTML कठिन समस्याएं हैं। यह उन लोगों के लिए उचित है जो इन क्षेत्रों में एक विशेषज्ञ नहीं हैं जो व्हाइटबोर्ड तक पहुंचने के लिए हैं, यह समझने के लिए काम करना शुरू करने में असमर्थ होने के लिए अनुचित है।
बहुत सारे काम के साथ कुछ जटिल एल्गोरिदम लिखने में सक्षम रहें
यदि आप विशेषज्ञ नहीं हैं, तो आपको जटिल और कठिन सामान करने में सक्षम होने की उम्मीद नहीं करनी चाहिए। हालांकि, एक अच्छा प्रोग्रामर को लगातार इस पर काम करके इसे प्राप्त करने में सक्षम होना चाहिए। यह पर्याप्त करो, और आप जल्द ही एक विशेषज्ञ होंगे :)