在C ++中将十进制数转换为二进制

时间:2018-11-02 14:43:51

标签: c++ visual-c++

此代码查找十进制整数N的二进制;将数字除以2并取下结果,然后将其除以2,
代码将获得这些除法0或1的余数,并建立二进制。

此代码的问题在于,它直到最后一个除法示例(直到最后除法为128,最后除法为1/2,余数为1)才运行,程序按照while循环中的指定在N/2 > 0处停止和1/2 = 0,因为1的类型为int)。

如何解决此问题或如何在while循环中修改条件?

#include <iostream>
using namespace std;
void ConvertToBinary(int N);
int main()
{
    int N = 1;
    while (1)
    {
        cout << "enter N: ";
        cin >> N;
        cout << endl;
        ConvertToBinary(N);
        cout << endl;
    }
    system("pause");
    return 0;
}
void ConvertToBinary(int N)
{
    int A[1000];
    int i=0;
    cout << "The binary of " << N << "= ";
    while (N / 2 > 0)
    {
        if (N % 2 == 0)
        {
            A[i] = 0;
        }
        else if (N % 2 != 0)
        {
            A[i] = 1;
        }
        N = N / 2;
        i++;
    }
    for (int j= i-1 ; j>=0 ; j--)
    {
        cout<<A[j];
    }


    cout << endl;

}

1 个答案:

答案 0 :(得分:1)

N不是“十进制整数”。这是一个数字

如果您真的想谈论细节,它已经存储在二进制文件中。

您所说的是表示形式。打印到屏幕上时数字的表示形式是什么?默认情况下,IOStreams将以十进制显示数字。

不过,您可以使用I / O操纵器来选择十六进制或八进制。 there isn't a std::bin yet很遗憾,但我们可以将std::bitset用于相同的目的:

#include <iostream>
#include <iomanip>
#include <bitset>

int main()
{
    int x = 42;
    std::cout << x << '\n';
    std::cout << std::hex << x << '\n';
    std::cout << std::oct << x << '\n';
    std::cout << std::bitset<sizeof(x)>(x) << '\n';
}

// Output:
//   42
//   2a
//   52
//   1010

live demo

然后,您的整个方法(通过将您的数字更改为以十进制表示形式看起来像原始数字的二进制表示形式的另一个数字“”来“伪造”表示形式转换)–解决了您的问题。轻松解决问题。