c++ - C++ 将十进制数转换为二进制数

标签 c++ visual-c++

此代码查找十进制整数 N 的二进制;它将数字除以 2,取结果的底数并将其也除以 2,
代码获取这些除法 0 或 1 的其余部分并构建二进制文件。

这段代码的问题在于,它直到最后一个除法示例才会运行(取 128 最后一个除法是 1/2 余数是 1,程序停止在 N/2 > 0 在 while 循环和 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;

}

最佳答案

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 )

而你的整个方法(通过将你的数字更改为另一个数字,当你以十进制表示形式打印它时,这个数字恰好看起来像原始数字的二进制表示 - 呸!)变得过时,解决你的问题毫不费力地解决问题。

关于c++ - C++ 将十进制数转换为二进制数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53120690/

相关文章:

c++ - 在 Windows 上使用 QT 运行 LibVLC 时禁用命令提示符

c++ - sizeof() 没有提供与编译器布局开关相同的大小?

python - 我怎样才能去除这个二值图像中的噪声并平滑图像-openCV

C++:计算每次迭代期间的概率百分比

c++ - 应返回 ComObject 的 ComServer

C++ 运算符重载和继承

c++ - 最佳实践引用

c++ - 使用新对象重新分配 `unique_ptr` 值的便捷类型推断方法

ssl - 提升 asio SSL stream.shutdown(ec);总是有错误,即 boost::asio::ssl::error::stream_truncated

matlab - 如何使用 Visual Studio 2010 调试 MATLAB .mex32/.mex64 文件