Computer >> 컴퓨터 >  >> 프로그래밍 >> C#

C#에서 메서드 없이 두 이진수의 합 구하는 방법

C#에서 내장 메서드나 라이브러리 함수를 사용하지 않고 두 이진수의 합을 구하려면, 각 자릿수를 하나씩 더하면서 올림수(carry)를 처리하는 방식으로 직접 계산해야 합니다. 이 글에서는 그 원리와 전체 코드를 단계별로 살펴보겠습니다.

1. 이진수 변수 선언 및 초기화

먼저 두 개의 변수를 선언하고 이진수 값으로 초기화합니다. 여기서는 편의상 이진수를 long 타입의 숫자 형태로 저장합니다.

val1 = 11010;
val2 = 10100;

Console.WriteLine("Binary one: " + val1);
Console.WriteLine("Binary two: " + val2);

2. 반복문으로 자릿수별 덧셈 수행

두 수의 합을 구하기 위해 두 값이 모두 0이 될 때까지 반복문을 실행합니다. 각 반복마다 다음 작업을 수행합니다.

  • % 10 연산으로 각 수의 마지막 자릿수(비트)를 추출합니다.
  • 추출한 두 비트와 이전 단계의 올림수(rem)를 더한 후, 다시 % 2를 적용하여 해당 자릿수의 결과 비트를 구합니다.
  • / 2 연산으로 새로운 올림수를 계산합니다.
  • / 10 연산으로 이미 처리한 자릿수를 제거합니다.
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;
}

이 방식은 우리가 손으로 이진수를 더할 때 사용하는 것과 동일한 원리입니다. 예를 들어 1 + 1 = 10(2)이므로, 결과 자릿수는 0이 되고 올림수 1이 다음 자릿수로 넘어갑니다.

3. 전체 코드

지금까지 설명한 내용을 모두 포함한 완성된 코드는 다음과 같습니다.

using System;
class Demo {
    public static void Main(string[] args) {
        long val1, val2;
        long i = 0, rem = 0;
        long[] sum = new long[30];

        val1 = 11010;
        val2 = 10100;

        Console.WriteLine("Binary one: " + val1);
        Console.WriteLine("Binary two: " + val2);

        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;
        Console.Write("Sum = ");

        while (i >= 0)
            Console.Write(sum[i--]);
    }
}

코드 설명

  • sum 배열: 계산된 각 자릿수의 비트를 순서대로 저장합니다. 최대 30자릿수까지 처리할 수 있도록 크기를 30으로 지정했습니다.
  • rem 변수: 자릿수 덧셈 중 발생하는 올림수를 저장합니다.
  • 마지막 올림수 처리: 반복문이 끝난 후에도 rem이 남아 있다면, 가장 앞자리에 추가합니다.
  • 역순 출력: 비트가 낮은 자릿수부터 배열에 저장되므로, 높은 자릿수부터 출력하기 위해 인덱스를 거꾸로 순회합니다.

4. 실행 결과

Binary one: 11010
Binary two: 10100
Sum = 101110

십진수로 확인해 보면 11010₂ = 26, 10100₂ = 20이며, 26 + 20 = 46 = 101110₂로 결과가 정확함을 알 수 있습니다.

정리

이처럼 C#에서는 Convert.ToInt32 같은 변환 메서드 없이도 나눗셈과 나머지 연산만으로 이진수 덧셈을 구현할 수 있습니다. 이 기법은 이진수 연산의 기본 원리를 이해하는 데 도움이 되며, 코딩 테스트나 학습용 예제로 활용하기 좋습니다.