c++ - 将十进制转换为 32 位二进制?

标签 c++ algorithm binary decimal

将 C++ 中的正整数(0 到 2,147,483,647)转换为 32 位二进制并显示。

我想用传统的“数学”方式(而不是使用 bitset 或使用 vector *.pushback* 或递归函数或C++ 中的某些特殊之处...),(一个原因是您可以用不同的语言实现它,也许吧)

所以我继续实现一个像这样的简单程序:

#include <iostream>
using namespace std;
int main()
{
    int dec,rem,i=1,sum=0;
    cout << "Enter the decimal to be converted: ";
    cin>>dec;
    do
    {
        rem=dec%2;
        sum=sum + (i*rem);
        dec=dec/2;
        i=i*10;
    } while(dec>0);

    cout <<"The binary of the given number is: " << sum << endl;

    system("pause");
    return 0;
}

问题是当你输入一个大数字比如 9999 时,结果将是一个负数或者一些奇怪的数字,因为 sum 是整数并且它不能处理超过它的最大范围,所以你知道一个 32 位二进制将有32 位数字对于 C++ 中的任何数字类型来说都太大了吗?这里有什么建议以及关于根据问题显示 32 位数字的建议吗?

最佳答案

您在 sum 中得到的结果除了打印外几乎没有用处。这是一个十进制数,看起来像一个二进制数。

如果十进制-二进制转换本身不是目的,请注意计算机内存中的数字已经用二进制表示(而且这不是 C++ 的属性),而且您唯一需要的是是一种打印它的方法。其中一种可能的方式如下:

int size = 0;
for (int tmp = dec; tmp; tmp >>= 1)
    size++;
for (int i = size - 1; i >= 0; --i)
    cout << ((dec >> i) & 1);

另一种使用字符数组的变体:

char repr[33] = { 0 };
int size = 0;
for (int tmp = dec; tmp; tmp >>= 1)
    size++;
for (int i = 0; i < size; ++i)
    repr[i] = ((dec >> (size - i - 1)) & 1) ? '1' : '0';
cout << repr << endl;

请注意,如果 dec 为负数,则两种变体均无效。

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

相关文章:

c++ - QGraphicsScene : How to map item movements into QUndoCommand?

algorithm - 修改 Dijkstra 算法以处理具有不止一种可能成本的边

algorithm - 证明一台共享机器和一台具有无限并行容量的调度算法

database - 在数据库中存储和索引二进制字符串

java - 从大型机EBCDIC文件中读取页眉和页脚

java - 在 Java 中标记二进制数据

c++ - 错误 : passing 'const string' as this argument of push_back

c++ - 在 C++ 中标记 "Braced Initializer List"样式的字符串(使用 Boost?)

c++ - 从我的 .exe 中隐藏纯文本字符串

java - 与 Java 7 相比,Java 6 中二进制文字的性能下降