मुझे सी में किसी संख्या के लॉग बेस 2 की गणना करने की आवश्यकता है लेकिन मैं गणित पुस्तकालय का उपयोग नहीं कर सकता। उत्तर को निकटतम int तक सटीक होने की आवश्यकता नहीं है। मैंने इसके बारे में सोचा है और मुझे पता है कि मैं थोड़ी देर के लूप का उपयोग कर सकता हूं और < 2 तक संख्या को विभाजित रख सकता हूं, और पुनरावृत्तियों की गिनती रखता हूं, लेकिन क्या यह बिटवाई ऑपरेटरों का उपयोग कर संभव है?बिटवाई ऑपरेटरों का उपयोग कर कंप्यूटर लॉग बेस 2 कैसे करें?
उत्तर
यदि आप थोड़ा सा ऑपरेटर के रूप में shifting गिनते हैं, तो यह आसान है।
आप पहले से ही जानते हैं कि कैसे द्वारा 2.
x >> 1
लगातार प्रभाग द्वारा यह करने के लिए सी
में किसी भी अहस्ताक्षरित पूर्णांक के लिए x/2
के रूप में ही आप इस तेजी से बनाने के लिए की जरूरत है, आप एक कर सकते हैं "विभाजित करें और जीतें" -शिफ्ट, कहें, एक समय में 4 बिट्स जब तक आप 0 तक नहीं पहुंच जाते, फिर वापस जाएं और अंतिम 4 बिट्स देखें। इसका मतलब है कि प्रत्येक के 63 में से 16 बदलाव और 1 9 की तुलना में तुलना करता है। चाहे यह एक आधुनिक सीपीयू पर वास्तव में तेज़ है, मैं परीक्षण के बिना नहीं कह सकता था। और आप इसे पहले चरण में ले जा सकते हैं, पहले 16 के समूह, फिर 4, फिर 1. संभवतः यहां उपयोगी नहीं है, लेकिन यदि आपके पास कुछ 1024-बिट पूर्णांक हैं, तो यह विचार करने योग्य हो सकता है।
धन्यवाद, मुझे नहीं पता था कि यह कितना स्पष्ट था। मैं यह समझ गया। – SKLAK
@ स्क्लाक: अतिरिक्त मज़े के लिए, '/ 2' और' >> 1' कोड को -O2 के साथ संकलित करने का प्रयास करें और देखें कि यह अलग कैसे है। यदि कोई दूसरे की तुलना में काफी तेज है, तो आप दोनों के लिए सटीक कोड प्राप्त कर सकते हैं। – abarnert
वे केवल 'हस्ताक्षरित' के लिए समान होंगे। 'Int' के लिए, साइन बिट को पहले से जोड़ने के लिए एक अतिरिक्त ऑपरेशन है, जो सुनिश्चित करता है कि परिणाम नकारात्मक अनंतता के बजाय शून्य की ओर गोल करता है। –
पहले से ही abamert द्वारा उत्तर दिया लेकिन सिर्फ अधिक ठोस है कि यह कैसे आप इसे कोड होता है होने के लिए:
Log2(x) = result
while (x >>= 1) result++;
- 1. बिटवाई ऑपरेटरों का उपयोग कर सशर्त वक्तव्य
- 2. बिटवाई ऑपरेटरों का उपयोग करके दो पूर्णांक का गुणा
- 3. बिटवाई ऑपरेटरों और "endianness"
- 4. बिटवाई ऑपरेटरों के बारे में कुछ प्रश्न
- 5. बिटवाई ऑपरेटरों के साथ "==" को बदलना
- 6. log4c का उपयोग कर रोलिंग लॉग का उपयोग कैसे करें?
- 7. सी # का उपयोग कर कंप्यूटर की विशिष्ट पहचान कैसे करें?
- 8. केवल बिटवाउंट ऑपरेटरों का उपयोग करके बिटकाउंट को कैसे कार्यान्वित करें?
- 9. शैल का उपयोग कर कंप्यूटर से लॉगआउट कैसे करूं?
- 10. बेस क्लास के ऑपरेटिंग ऑपरेटरों ... सुरक्षित?
- 11. उच्चतम 2 संख्याओं को ढूंढना- कंप्यूटर विज्ञान
- 12. सी ++ में आप बिटवाई झंडे का उपयोग कैसे करते हैं?
- 13. बिटवाई इंडेक्सिंग?
- 14. आर कंप्यूटर के सभी कोर का उपयोग कैसे करें?
- 15. तार्किक, अंकगणितीय बिटवाई बदलाव
- 16. Asp.net एमवीसी 2 में बेस व्यू मॉडेल का उपयोग कैसे करें
- 17. वेब डेवलपमेंट के दौरान बिटवाइस ऑपरेटर का उपयोग कब करें?
- 18. jQuery .next() का उपयोग कर अगले 2 (या 2 से अधिक) आइटम का चयन कैसे करें?
- 19. बिटवाई या: सी # बनाम सी ++
- 20. कंप्यूटर 2 संख्याओं को कैसे बढ़ाता है?
- 21. OAuth 2 का उपयोग कैसे करें - OAuth 2 C# उदाहरण
- 22. रुबी में बेस नेमस्पेस का उपयोग कैसे करें?
- 23. grid.newpage में आर बेस प्लॉट का उपयोग कैसे करें?
- 24. एक कंप्यूटर सेवा में कंप्यूटर का नाम प्राप्त करें?
- 25. 48-बिट बिटवाई ऑपरेशंस?
- 26. JQuery/जावास्क्रिप्ट और & ऑपरेटरों का उपयोग
- 27. लॉग 4j 2
- 28. बिटवाई ऑपरेशंस?
- 29. जीएलएसएल - बिटवाई ऑपरेटरों को आरक्षित क्यों किया जाता है? बिटवाई ऑप्स का उपयोग करने के लिए एक अच्छा विकल्प क्या है (फ्लोटिंग पॉइंट ऑप्स जो बिटवाई का अनुकरण करते हैं)
- 30. मैं कंप्यूटर प्रोग्राम के साथ लॉग ढेर लकड़ी की पहेली को कैसे हल कर सकता हूं?
आप गिनी जाती हैं [स्थानांतरण] (http://en.wikipedia.org/wiki/Bitwise_operation#Bit_shifts) थोड़ा सा ऑपरेटर के रूप में? यदि ऐसा है, तो जवाब बहुत स्पष्ट है। यदि नहीं, तो यह मुश्किल है। – abarnert
0_o आप गणित पुस्तकालय का उपयोग क्यों नहीं कर सकते? –
@ जैकमेन: संभवतः यह या तो होमवर्क, या स्वयं शिक्षण समकक्ष है। लेकिन यह ठीक है; ऐसा लगता है कि उसने इसमें कुछ प्रयास किया है (वह हमेशा एक कामकाजी समाधान है), और यह देखने के लिए संकेतों की तलाश कर रहा है कि ऐसा करने का दूसरा तरीका है, न कि हमें उसके लिए अपना होमवर्क करने के लिए कहें। – abarnert