ในบทช่วยสอนนี้ เราจะเขียนโปรแกรมที่คูณตัวเลขสองตัวที่ระบุโดยใช้ตัวดำเนินการระดับบิต
กะซ้าย (<<) ตัวดำเนินการจะใช้สำหรับการคูณในขณะที่ กะขวา (>>) ใช้สำหรับแผนก
การคูณตัวเลขสองตัว 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