如何在C++中将int转换为二进制字符串表示形式

neu*_*cer 15 c++ string binary g++

我有一个int,我想存储为二进制字符串表示.如何才能做到这一点?

Mar*_*ork 39

试试这个:

#include <bitset>
#include <iostream>
int main()
{
    std::bitset<32>      x(23456);
    std::cout << x << "\n";


    // If you don't want a variable just create a temporary.
    std::cout << std::bitset<32>(23456) << "\n";
}
Run Code Online (Sandbox Code Playgroud)


fre*_*low 14

我有一个int,我想先转换为二进制数.

这到底是什么意思呢?没有类型"二进制数".好吧,int除非你使用的是一台非常奇怪的计算机,否则a已经在内部以二进制形式表示,但这是一个实现细节 - 从概念上讲,它只是一个整数.

每次在屏幕上打印数字时,都必须将其转换为字符串.事实上,大多数I/O系统都为此过程选择了十进制表示,以便人们有更轻松的时间.但是没有任何固有的小数int.

无论如何,要生成b整数的基本表示x,只需遵循以下算法:

  1. s用空字符串初始化

  2. m = x % b

  3. x = x / b

  4. 转换m成数字,d.

  5. 追加ds.

  6. 如果x不为零,请转到步骤2.

  7. 相反 s

如果b <= 10您的计算机使用数字编码,其中数字0-9是连续的,那么步骤4很简单,因为它只是简单d = '0' + m.否则,您需要一个查找表.

如果您提前知道需要多少空间并从字符串中的右端开始,则可以简化步骤5和7以附加d在左侧s.

b == 2(例如二进制表示)的情况下,步骤2可以简化为m = x & 1,并且步骤3可以简化为x = x >> 1.

解决方案reverse:

#include <string>
#include <algorithm>

std::string binary(unsigned x)
{
    std::string s;
    do
    {
        s.push_back('0' + (x & 1));
    } while (x >>= 1);
    std::reverse(s.begin(), s.end());
    return s;
}
Run Code Online (Sandbox Code Playgroud)

解决方案reverse:

#include <string>

std::string binary(unsigned x)
{
    // Warning: this breaks for numbers with more than 64 bits
    char buffer[64];
    char* p = buffer + 64;
    do
    {
        *--p = '0' + (x & 1);
    } while (x >>= 1);
    return std::string(p, buffer + 64);
}
Run Code Online (Sandbox Code Playgroud)


DVK*_*DVK 2

http://www.phanderson.com/printer/bin_disp.html就是一个很好的例子。

简单方法的基本原理:

  • 循环直到#为0
  • &(按位与)# 与 1。将结果(1 或 0)打印到字符串缓冲区的末尾。
  • 使用 . 将 # 移动 1 位>>=
  • 重复循环
  • 打印反转的字符串缓冲区

为了避免反转字符串或需要将自己限制为适合缓冲区字符串长度的 #s,您可以:

  • 计算上限(log2(N)) - 比如说 L
  • 计算掩码 = 2^L
  • 循环直到掩码== 0:
  • &(按位与)带有 # 的掩码。打印结果(1 或 0)。
  • 数字 &= (掩码-1)
  • 掩码>>= 1(除以2)