C#
 Computer >> コンピューター >  >> プログラミング >> C#

C#で2つの2進数の積を求める方法をわかりやすく解説

2つの2進数の積(掛け算の結果)を求めるには、まず対象となる2進数を設定します。C#では、2進数をlong型の整数として扱い、筆算と同じ要領で各桁を処理していくことで積を計算できます。

ここでは、2進数「11100」と「10001」の積を求める例を見ていきましょう。

1. 2進数の設定

最初に、掛け合わせる2つの2進数を変数に代入し、コンソールに表示します。

val1 = 11100;
val2 = 10001;

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

2. ループ処理で積を計算する

次に、whileループを使って2つ目の2進数の各桁を取り出しながら積を求めていきます。桁が「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);

3. 加算を行うdisplayMul()メソッド

上記のコードでは、1つ目の2進数を引数としてdisplayMul()メソッドを呼び出しています。このメソッドは、2進数同士の加算を桁ごとに実行し、繰り上がりも考慮した結果を返す役割を担います。

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;
}

それでは、ここまでの内容をまとめた完全なコードを確認してみましょう。

サンプルコード(完全版)

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;
    }
}

実行結果

このプログラムを実行すると、以下のように2進数の積が出力されます。

Binary one: 11100
Binary two: 10001
Product = 111011100

このように、各桁の値を取り出しながら2進数の加算を繰り返すことで、C#でも2進数同士の掛け算を簡単に実装できます。仕組みは人間が行う筆算と同じなので、アルゴリズムの理解にも役立ちます。

  1. Pythonで3つの数値の中から最大値を求める方法

    Pythonで3つの数値の中から最大のものを見つけるには、主に2つの方法があります。1つ目は組み込み関数の max() を使う方法、2つ目は if文による条件分岐で自分で比較する方法です。それぞれのやり方を具体例とともに見ていきましょう。 方法1:max() 関数を使う 最もシンプルな方法は、3つの数値をリストに格納して、組み込み関数の max() を呼び出すことです。 例 my_list = [10, 12, 3] print(max(my_list)) 出力結果 12 さらに、リストを作らずに max() に直接引数として渡すことも可能です。こちらの方がより簡潔に書けます。 print(m

  2. Pythonで自然数の合計を求める3つの方法【while文・for文・sum関数】

    Pythonでは、自然数の合計を求める方法がいくつかあります。この記事では、whileループ、forループ、そして組み込み関数sum()を使った3つの方法を、具体的なコード例とともにわかりやすく解説します。 方法1:whileループを使う whileループを使用すると、変数iの値を1ずつ増やしながら、その値を累積的に加算していくことができます。以下の例では、最初の10個の自然数(1から10まで)の合計を計算しています。 s,i=0,0 n=10 while i<n: i=i+1 s=s+i print ("sum of first 10 natural num