इस ट्यूटोरियल में, हम एक प्रोग्राम लिखने जा रहे हैं जो दिए गए दो नंबरों को बिटवाइज़ ऑपरेटरों का उपयोग करके गुणा करता है।
बाएं शिफ्ट (<<) गुणन के लिए ऑपरेटर का उपयोग किया जाता है जबकि राइट शिफ्ट (>>) विभाजन के लिए प्रयोग किया जाता है।
दो संख्याओं का गुणन x, y x * y =(x * 2) * (y / 2) . के रूप में लिखा जा सकता है यदि y और भी है तो यह x * y =(x * y) * (y / 2) + x के बराबर है।
इसलिए जब भी दूसरी संख्या विषम हो जाए, तो पहली संख्या को परिणाम में जोड़ें। आइए समस्या को हल करने के लिए चरणों को देखें।
एल्गोरिदम
- दो नंबर शुरू करें।
- एक लूप लिखें जो दूसरी संख्या के 0 होने तक पुनरावृति करता है।
- यदि दूसरी संख्या विषम है, तो परिणाम में पहली संख्या जोड़ें।
- बाएं शिफ्ट पहले नंबर पर 1 बिट।
- दूसरी संख्या को 1 बिट से दायाँ शिफ्ट करें।
कार्यान्वयन
C++ में उपरोक्त एल्गोरिथम का कार्यान्वयन निम्नलिखित है
#include <bits/stdc++.h> using namespace std; int multiplyTwoNumbers(int a, int b) { int result = 0; while (b > 0) { if (b & 1) { result += a; } a = a << 1; b = b >> 1; } return result; } int main() { cout << multiplyTwoNumbers(75, 4) << endl; cout << multiplyTwoNumbers(90, 9) << endl; cout << multiplyTwoNumbers(83, 66) << endl; return 0; }
आउटपुट
यदि आप उपरोक्त कोड चलाते हैं, तो आपको निम्न परिणाम प्राप्त होंगे।
300 810 5478