使用指数将十进制转换为二进制

Converting decimal to binary using exponents

本文关键字:转换 二进制 十进制 指数      更新时间:2023-10-16

我被要求编写代码来将十进制转换为二进制形式。 我已经尝试了几种不同的方法,但没有给我我需要的订单。 所以我目前被困在如何进行上。

我已经尝试通过正常查找二进制比较来尝试,但它以不正确的顺序给我,假设正确的顺序是 1001100,我只是得到0011001。 而且我无法更改顺序。 我不允许使用除iostream,cmath和string之外的任何其他库。 我现在尝试使用指数 2^指数简单地找到转换。

这是我目前拥有的:

int num, exp,rem;
string biNum;
cout<<"Enter decimal number: "<<endl;
cin>>num;
for (exp = 0; pow(2, exp) < num; exp++) {
}
while (num > 0) {
    rem = num % (int) pow(2, exp);
    if (rem != 0) {
            biNum = biNum + '1';
    } else {
            biNum = biNum + '0';
    }
    exp--;
    }
cout<<biNum;
return 0;

}

我目前根本没有收到任何结果。

下面是一个收集最低有效位 (LSB( 中

位的示例:
//...
while (num > 0)
{
  const char bit = '0' + (num & 1);
  biNum += bit;
  num = num >> 1;
}

解释

循环继续,直到num变量为零。 除非您真的想要它们,否则添加额外的零是没有意义的。

如果位为 1,则 (num & 1) 表达式返回 1,如果位为 0,则返回 0。
然后将其添加到字符0以生成'0''1'

变量声明为 const,因为它在声明(定义(后不会被修改。

新创建的字符将追加到位字符串中。

最后,num向右移动一位(因为该位已经处理过(。

还有许多其他方法可以按最高有效位 (MSB( 顺序收集位。 这些方式留给OP和读者。:-)

你去吧。 这将以正确的顺序输出位:

#include <iostream>
#include <string>
int main ()
{
    unsigned num;
    std::string biNum;
    std::cin >> num;
    while (num)
    {
        char bit = (num & 1) + '0';
        biNum.insert (biNum.cbegin (), bit);
        num >>= 1;
    }
    std::cout << biNum;
    return 0;
}

现场演示

您可以使用递归函数以相反的顺序打印结果,避免使用容器/数组,如下所示:

void to_binary(int num) {    
    int rem = num % 2;
    num = (num - rem) / 2;    
    if (num < 2){ 
        std::cout << rem << num;
        return;
    }    
    to_binary(num); 
    std::cout << rem;
}
int main()
{
    to_binary(100);
}