2012-11-25 13 views
12

प्राप्त करने के लिए मैं जानना चाहता हूं कि बिट्सफ़िफ्ट या बिटवाई ऑपरेटरों का उपयोग करके किसी अन्य पूर्णांक (दोनों पॉजिटिव) के साथ पूर्णांक को विभाजित करके शेष को कैसे प्राप्त किया जाए। / ऑपरेटर या % ऑपरेटर का उपयोग नहीं किया जाना चाहिए।बिट्सफ़िफ्ट शेष

उदाहरण के लिए, शेष प्राप्त करने के लिए जब divisor 2^k रूप का है, तो निम्न ऑपरेशन शेष उत्पन्न करता है।

m = Remainder

n = The number

d = The divisor

m = n & (d - 1)

हालांकि इस पद्धति का ही काम करता है जब d रूप 2^k की है। मैं 2 की गैर-शक्तियों के लिए एक समान विधि जानना चाहता हूं। मैं वर्तमान में programming challenges से एक समस्या पर काम कर रहा हूँ और इस तरह के एक विधि रोजगार कम करने के लिए प्रोग्राम निष्पादन समय

+1

क्या यह तथ्य नहीं होगा कि बिट प्रतिनिधित्व केवल आधार -2 में ही सीमित है? मूल्य 43/7 पर विचार करें - मूल्य वास्तव में 6.142857 है ...। 2 से अधिक आधार में मूल्य के लिए आपने किस सामान्य दृष्टिकोण पर विचार किया है? – Makoto

+5

कोई सामान्य विधि नहीं है। यदि आप divisor को जानते हैं, तो आप विभाजन को एक गुणा और कुछ बदलावों और जोड़ों/घटाव के साथ प्रतिस्थापित कर सकते हैं। इसके बारे में किसी भी सक्षम सी संकलक से पूछें, और यह आपको किसी भी संकलन समय निरंतर के लिए जादू मान देगा। –

+0

जब तक उत्तर में केवल 1 बिट्सफ़िफ़्ट स्टेटमेंट शामिल नहीं होता है, तो मैं शर्त लगाता हूं कि आप जावा मॉड ऑपरेटर को हरा नहीं देते हैं। – goat

उत्तर

1

कोई जवाब यह है कि ऑपरेटर % उपयोग नहीं करता है एक कम कुशल जवाब हो जाएगा चाहते हैं, लेकिन, अगर आप पूरी तरह से उपयोग नहीं कर सकते ऑपरेटर, फिर, एक ही समाधान n बार-बार से घ घटाना एक पाश का उपयोग करने के लिए है: यह मानते हुए कि आपके पूर्णांकों 32-बिट कर रहे हैं

m = n; 
while (m >= d) 
{ 
    m -= d; 
} 

, तो आप जहां हम n से घ के गुणकों हटाना एक अनुकूलित संस्करण पर विचार कर सकते हैं:

m = n; 
for (i = 31; i >= 0; i--) 
{ 
    di = d << i; 
    if (di > 0 && m >= di) m -= di; 
} 

यह उदाहरण, मानता है कि पूर्णांक हस्ताक्षरित हैं और ओवरफ्लो के लिए देखता है यानी di > 0 के लिए परीक्षण।

+1

दुर्भाग्यवश, एक अतिप्रवाह बदलाव के परिणामस्वरूप ऋणात्मक संख्या नहीं होती है, भले ही आप सामान्य 2 एस-पूरक मशीन मानें। –

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

  • कोई संबंधित समस्या नहीं^_^