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

C#으로 두 이진수의 합을 계산하는 방법

두 이진수의 합을 구하려면 먼저 더할 두 개의 이진수를 설정해야 합니다.

val1 = 11110;
val2 = 11100;

이어서 미리 작성해 둔 displaySum() 메서드를 호출하여 두 이진수의 합을 계산하고 결과를 화면에 출력합니다.

sum = displaySum(val1, val2);

displaySum() 메서드 내부에서는 이진수의 각 자리 비트를 하나씩 저장하기 위해 길이 30짜리 long형 배열을 새로 선언합니다.

long[] sum = new long[30];

동작 원리

이진수 덧셈은 다음 순서로 진행됩니다.

1. 각 이진수를 10으로 나눈 나머지(% 10)를 이용해 가장 오른쪽 비트부터 한 자리씩 추출합니다.
2. 추출한 두 비트와 이전 단계에서 발생한 자리올림(rem)을 더한 뒤, 2로 나눈 나머지가 해당 자리의 결과 비트가 됩니다.
3. 같은 값을 2로 나눈 몫이 다음 단계로 넘어갈 자리올림 값입니다.
4. 두 이진수가 모두 0이 될 때까지 반복한 후, 남아 있는 자리올림 값이 있으면 마지막에 추가합니다.
5. 배열에 역순으로 저장된 비트들을 다시 앞자리부터 조합하여 최종 이진수 형태의 합을 만듭니다.

전체 예제 코드

아래는 C#으로 두 이진수의 합을 계산하는 전체 코드입니다.

using System;
class Demo {
   public static void Main(string[] args) {
      long val1, val2, sum = 0;
      val1 = 11110;
      val2 = 11100;

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

      sum = displaySum(val1, val2);
      Console.WriteLine("Sum = {0}", sum);
   }

   static long displaySum (long val1, long val2) {
      long i = 0, rem = 0, res = 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)
      res = res * 10 + sum[i--];
      return res;
   }
}

실행 결과

위 코드를 실행하면 다음과 같은 출력 결과를 확인할 수 있습니다.

Binary one: 11110
Binary two: 11100
Sum = 111010

이처럼 나머지 연산과 몫 연산을 반복적으로 활용하면 별도의 변환 없이도 이진수 형태 그대로 두 수의 합을 손쉽게 계산할 수 있습니다.