十进制包括负到 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';
}
我试图将十进制数(包括负数)转换为二进制数,但遗憾的是我似乎无法让它工作。
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';
}