繁体   English   中英

十进制,包括负到 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 == -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';
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM