Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> C++

คูณตัวเลขด้วยตัวดำเนินการบิตวایزใน C++

โจทย์

ในบทช่วยสอนนี้ เราจะเขียนโปรแกรมที่คูณตัวเลขสองตัวที่กำหนดโดยใช้ตัวดำเนินการบิตวایز

ตัวดำเนินการ เลขซ้าย (<<) ใช้สำหรับการคูณ ในขณะที่ เลขขวา (>>) ใช้สำหรับการหาร

การคูณของตัวเลขสองตัว 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