C++ 十进制,包括负数到32位二进制转换器

C++ 十进制,包括负数到32位二进制转换器,c++,binary,decimal,negative-number,C++,Binary,Decimal,Negative Number,我试图将十进制数(包括负数)转换成二进制数,但遗憾的是,我似乎无法让它工作 int main() { QString input = "00000000000000000000000000000101"; //positive 5 int dec = input.ToInt(); char bin32[] = "00000000000000000000000000000000"; for (int pos = 31; pos >= 0 &&

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

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;
}
intmain()
{
QString输入=“000000000000000000000000101”;//正5
int dec=input.ToInt();
char bin32[]=“00000000000000000000”;
对于(int pos=31;pos>=0&&dec;--pos)
{
如果(12月2日)
bin32[pos]=“1”;
dec/=2;
}

cout您遇到的问题是
-1%2=-1
如果(-1)
为真,那么您的算法会为
x
-x
生成完全相同的结果

解决此问题的一种方法是在循环中使用
无符号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';
}
intdec=-5;
char bin32[]=“00000000000000000000”;
用于(int pos=0;pos<32;++pos)
{

如果(dec&(1),则循环假定
dec
为非负值。从逻辑上讲,它需要修改以处理负值。可能不是练习的重点,而是
input.toInt(nullptr,2)
QString::number(n,2)
可以从/转换为二进制字符串您的示例输入是101,而不是正数5。我也想看到负数位,因此示例-5将是111111111011,我发布的两个代码示例在
111111111111011
时生成
dec=-5