이 튜토리얼에서는 비트 연산자를 사용하여 주어진 두 숫자를 곱하는 프로그램을 작성할 것입니다.
왼쪽 시프트(<<) 연산자는 곱셈에 사용되는 반면 오른쪽 시프트(>>) 나눗셈에 사용됩니다.
두 숫자의 곱셈 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