十进制包括负到 32 位二进制转换器

Decimal including negative to 32 bit binary converter

我试图将十进制数(包括负数)转换为二进制数,但遗憾的是我似乎无法让它工作。

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 % 2 == -1if (-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';
}