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