Преобразование целого числа в двоичную строку цифр

В настоящее время я работаю над моделированием процессора MIPS на C ++ для класса архитектуры comp, и у меня возникают некоторые проблемы с преобразованием десятичных чисел в двоичные (числа со знаком в обе стороны). Все работает нормально до самого последнего бита, потому что мой текущий алгоритм выходит за пределы области для int на 1 << = 31. Просто нужен толчок в правильном направлении, чтобы запустить его. Спасибо!

//Assume 32 bit decimal number
string DecimalToBinaryString(int a)
{
    string binary = "";
    int mask = 1;
    for(int i = 0; i < 31; i++)
    {
        if((mask&a) >= 1)
            binary = "1"+binary;
        else
            binary = "0"+binary;
        mask<<=1;
    }
    cout<<binary<<endl;
    return binary;
}

Я также включаю свой другой алгоритм для полноты картины. Прошу прощения за отсутствие комментариев, но это довольно прямолинейно.

int BinaryStringToDecimal(string a)
{
    int num = 0;
    bool neg = false;
    if(a.at(0) == '1')
    {
        neg = true;
        for(int x = a.length()-1; x >= 0; x--)
        {
            if(a.at(x) == '1')
                a.at(x) = '0';
            else a.at(x) = '1';
        }
        a.at(a.length()-1) += 1;
        for(int x = a.length()-1; x >= 0; x--)
        {
            if(a.at(x) == '2')
            {
                if(x-1 >= 0)
                {
                    if(a.at(x-1) == '1')
                        a.at(x-1) = '2';
                    if(a.at(x-1) == '0')
                        a.at(x-1) = '1';
                    a.at(x) = '0';
                }
            }
            else if(a.at(x) == '3')
            {
                if(x-1 >= 0)
                    a.at(x-1) += '2';
                a.at(x) = '1';
            }
        }
        if(a.at(0) == '2')
            a.at(0) = '0';
        else if(a.at(0) == '3')
            a.at(0) = '1';
    }
    for(int x = a.length()-1; x >= 0; x--)
    {
        if(a.at(x) == '1')
            num += pow(2.0, a.length()-x-1);
    }
    if(neg)
        num = num*-1;   
    return num;
 }

Также, если кто-нибудь знает какие-нибудь хорошие способы более эффективного написания этих текстов, я бы хотел их услышать. У меня было только два вводных класса программирования, но я экспериментировал с разными техниками, чтобы увидеть, насколько мне нравится их стиль.

23
задан Paul Ruiz 22 November 2011 в 04:48
поделиться