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";
}
fre*_*low 14
我有一个int,我想先转换为二进制数.
这到底是什么意思呢?没有类型"二进制数".好吧,int除非你使用的是一台非常奇怪的计算机,否则a已经在内部以二进制形式表示,但这是一个实现细节 - 从概念上讲,它只是一个整数.
每次在屏幕上打印数字时,都必须将其转换为字符串.事实上,大多数I/O系统都为此过程选择了十进制表示,以便人们有更轻松的时间.但是没有任何固有的小数int.
无论如何,要生成b整数的基本表示x,只需遵循以下算法:
s用空字符串初始化
m = x % b
x = x / b
转换m成数字,d.
追加d上s.
如果x不为零,请转到步骤2.
相反 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;
}
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);
}
http://www.phanderson.com/printer/bin_disp.html就是一个很好的例子。
简单方法的基本原理:
&(按位与)# 与 1。将结果(1 或 0)打印到字符串缓冲区的末尾。>>=。为了避免反转字符串或需要将自己限制为适合缓冲区字符串长度的 #s,您可以:
&(按位与)带有 # 的掩码。打印结果(1 或 0)。| 归档时间: | 
 | 
| 查看次数: | 40699 次 | 
| 最近记录: |