gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-28 04:08:24 25 4
gpt4 key购买 nike

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

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';
}

关于c++ - 十进制包括负到 32 位二进制转换器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58300244/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com