[英]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.