十进制到二进制C ++

时间:2014-12-04 17:45:03

标签: c++ binary

我很清楚这个主题有一些重复的问题,虽然我找到的每个问题都没有解决我的问题。首先,我不能使用除iostreamiomanipstring之外的任何特殊库。所以我到目前为止就是这个

int DecToBin(int num)
{
    int bin = 0;
    while (num > 0)
    {
        bin += (num % 2);
        //cout << bin << endl;  this is used for debugging purposes
        num = num / 2;
    }
    return bin;
}

我称之为

 int binary = DecToBin(170);
 cout << binary << endl;

除了我持续0,我相信是因为数据类型我也设置了它。所以我的问题是如何获得正确的输出呢?我的结果也应该是

10101010 is base 10 of 170

1 个答案:

答案 0 :(得分:1)

由于@ Cyber​​的答案在技术上解决了这个问题,我认为解释你的误解并不会有什么坏处。您的函数DecToBin不会将十进制转换为二进制,而是二进制转换为一些奇怪的二进制格式,它以十进制格式打印,为您提供二进制表示。问题是数字已经以二进制格式存储,并且如果您使用std::cin输入,则通过翻译器(如果您在源代码中使用常量)或io库将其转换为二进制。当您使用std::cout在控制台上打印时,同一个库会将其从二进制转换回十进制(默认情况下),这导致您的想法,该数字以十进制格式存储。

从技术上讲,你的解决方案是有效的,但我不确定你的教授会接受它,因为它表明你不理解这个概念(我不会)。正确的解决方案是将int转换为二进制字符串,然后将其输出到std::cout

std::string binary( unsigned int n )
{
    std::string s;
    for( ; n > 0; n /= 2 )
       s = std::to_string( n % 2 ) + s;
    return s;
}

int main()
{
     int n = 170;
     std::cout << "binary representation of " << n << " is " << binary( n )
               << std::endl;
}