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