Десятичный, включая отрицательный в 32-разрядный двоичный преобразователь - PullRequest
0 голосов
/ 09 октября 2019

Я пытался преобразовать десятичные числа (включая отрицательные) в двоичные числа, но, к сожалению, я не могу заставить его работать, кажется.

int main()
{
    QString input = "00000000000000000000000000000101";  //positive 5
    int dec = input.ToInt(); 


    char bin32[]  = "00000000000000000000000000000000";
    for (int pos = 31; pos >= 0 && dec; --pos)
    {
        if (dec % 2) 
            bin32[pos] = '1';
        dec /= 2;
    }

    cout << "The binary of the given number is: " << bin32 << endl;
}

Когда я даю -5 как input, dec также-5 но двоичного числа нет. Заранее спасибо

1 Ответ

1 голос
/ 09 октября 2019

Проблема, с которой вы сталкиваетесь, в том, что -1 % 2 == -1 и if (-1) - это правда. Таким образом, ваш алгоритм выдает точно такой же результат для x и -x.

. Один из способов исправить это - использовать unsigned int в вашем цикле:

unsigned int num = dec;

char bin32[] = "00000000000000000000000000000000";
for (int pos = 31; pos >= 0; --pos)
{
    if (num % 2)
        bin32[pos] = '1';
    num /= 2;
}

Другойиспользовать побитовые операторы вместо арифметики:

int dec = -5;

char bin32[] = "00000000000000000000000000000000";
for (int pos = 0; pos < 32; ++pos)
{
    if (dec & (1 << pos))
        bin32[31-pos] = '1';
}
...