두 이진수의 곱을 구하려면 먼저 곱셈에 사용할 두 개의 이진수를 설정해야 합니다. 이 예제에서는 11100과 10001이라는 두 이진수를 사용합니다.
val1 = 11100;
val2 = 10001;
Console.WriteLine("Binary one: "+val1);
Console.WriteLine("Binary two: "+val2);곱셈 알고리즘의 동작 원리
이 방식은 우리가 손으로 십진수 곱셈을 하는 과정과 매우 유사합니다. 두 번째 이진수의 각 자릿수를 오른쪽부터 하나씩 확인하면서, 해당 자릿수가 1이면 첫 번째 이진수를 현재 자릿값만큼 이동시켜 누적 곱에 더하고, 0이면 자릿값만 이동시킵니다.
반복문을 통해 곱을 계산하는 코드는 다음과 같습니다.
while (val2 != 0) {
digit = val2 % 10;
if (digit == 1) {
val1 = val1 * factor;
prod = displayMul(val1, prod);
} else
val1 = val1 * factor;
val2 = val2 / 10;
factor = 10;
}
Console.WriteLine("Product = {0}", prod);위 코드에서는 첫 번째 이진수를 인자로 전달하며 displayMul() 메서드를 호출합니다. 이 메서드는 두 이진수를 자릿수별로 더하는 역할을 하며, 각 자릿수의 합과 올림수(캐리)를 계산하여 최종 결과를 반환합니다.
static long displayMul (long val1, long val2) {
long i = 0, rem = 0, mul = 0;
long[] sum = new long[30];
while (val1 != 0 || val2 != 0) {
sum[i++] =(val1 % 10 + val2 % 10 + rem) % 2;
rem =(val1 % 10 + val2 % 10 + rem) / 2;
val1 = val1 / 10;
val2 = val2 / 10;
}
if (rem != 0)
sum[i++] = rem;
i = i-1;;
while (i >= 0)
mul = mul * 10 + sum[i--];
return mul;
}전체 코드
다음은 위에서 설명한 과정을 모두 포함한 완전한 C# 코드입니다.
예제
using System;
class Demo {
public static void Main(string[] args) {
long val1, val2, prod = 0;
long digit, factor = 1;
val1 = 11100;
val2 = 10001;
Console.WriteLine("Binary one: "+val1);
Console.WriteLine("Binary two: "+val2);
while (val2 != 0) {
digit = val2 % 10;
if (digit == 1) {
val1 = val1 * factor;
prod = displayMul(val1, prod);
} else
val1 = val1 * factor;
val2 = val2 / 10;
factor = 10;
}
Console.WriteLine("Product = {0}", prod);
}
static long displayMul (long val1, long val2) {
long i = 0, rem = 0, mul = 0;
long[] sum = new long[30];
while (val1 != 0 || val2 != 0) {
sum[i++] =(val1 % 10 + val2 % 10 + rem) % 2;
rem =(val1 % 10 + val2 % 10 + rem) / 2;
val1 = val1 / 10;
val2 = val2 / 10;
}
if (rem != 0)
sum[i++] = rem;
i = i-1;;
while (i >= 0)
mul = mul * 10 + sum[i--];
return mul;
}
}출력 결과
Binary one: 11100 Binary two: 10001 Product = 111011100
실행 결과를 보면, 11100(십진수 28)과 10001(십진수 17)의 곱인 111011100(십진수 476)이 정상적으로 출력되는 것을 확인할 수 있습니다. 이처럼 반복문과 자릿수 덧셈 메서드를 조합하면 별도의 내장 연산자 없이도 이진수 곱셈을 직접 구현할 수 있습니다.