Сложение двоичных чисел - C# (210680)

Узнай цену своей работы

Формулировка задачи:

Нужно сложить 2 двоичных числа. Написал класс с двумя методами: DecimalToBinary() - преобразует десятичное число в двоичное. BinaryToDecimal() - обратное действие. каждый по отдельности работает правильно, но вот этот код:
MyConventer conv = new MyConventer();
 
label3.Text = conv.DecimalToBinary(conv.BinaryToDecimal(11) +  conv.BinaryToDecimal(11));
вместо 6(110) вовращает 9(1001). Если поменять значения, то можно догадаться, что первое он суммирует 2 раза. Если кто-то захочет помочь могу кинуть код класса, но не вижу в этом смысла, если каждый метод сам по себе правильно работает.

Решение задачи: «Сложение двоичных чисел»

textual
Листинг программы
public double BinaryToDecimalSystem(double digit)
{ 
    double result = 0;
    bool isPoint = false;
    bool positive = true;
    int point_num = 0;
    string digitStr = digit.ToString(); 
    string real = "", fractional = "";
 
    if (digit < 0)
    {
        positive = false;
        digit = Math.Abs(digit);
    }
 
    //проверяем есть ли точка, если есть значит число не целое. 
    for (int i = 0; i < digitStr.Length; i++)
    {
        if (digitStr[i] == ',')
        {
            isPoint = true;
            point_num = i;
            break;
        }
    }
 
    if (!isPoint)
    {
        result += CalculatePow(digitStr, digitStr.Length - 1);
    }
    else
    {
        foreach (char x in digitStr)
        {
            if (x < point_num)
            {
                real += x;
            }
            else if (x > point_num)
            {
                fractional += x;
            }
        }
 
        result += CalculatePow(real, real.Length - 1);
        result += CalculatePow(fractional, -1);
    }
 
    if (!positive)
    {
        result = -1 * result;
    }
 
    return result;
}
 
private double CalculatePow(string number, double pow)
{
    double result = 0;
    double[] digits = number.Select(x => double.Parse(x.ToString())).ToArray();
 
    for (int i = 0; i < digits.Length; i++)
    {
        result += digits[i] * Math.Pow(2, pow);
        pow--;
    }
 
    return result;
}

Оцени полезность:

6   голосов , оценка 4 из 5
Похожие ответы