我需要处理一个二进制数。

我试着写:

const char x = 00010000;

但这并没有起作用。

我知道我可以使用与00010000值相同的十六进制数,但我想知道在c++中是否有用于二进制数的类型,如果没有,是否有其他解决方案?


当前回答

如果你正在使用GCC,那么你可以使用GCC扩展(包含在c++ 14标准中):

int x = 0b00010000;

其他回答

二进制数的“类型”与任何十进制、十六进制或八进制数相同:int(甚至char, short, long long)。

当你给一个常数赋值时,你不能用11011011赋值(奇怪而不幸的是),但你可以使用hex。海克斯更容易从心理上理解。块在啃(4位)和翻译成一个字符在[0-9a-f]。

template<unsigned long N>
struct bin {
    enum { value = (N%10)+2*bin<N/10>::value };
} ;

template<>
struct bin<0> {
    enum { value = 0 };
} ;

// ...
    std::cout << bin<1000>::value << '\n';

字面值最左边的数字仍然是1,但不管怎样。

只需使用c++中的标准库:

#include <bitset>

你需要一个std::bitset类型的变量:

std::bitset<8ul> x;
x = std::bitset<8>(10);
for (int i = x.size() - 1; i >= 0; i--) {
      std::cout << x[i];
}

在本例中,我将10的二进制形式存储在x中。

8ul定义了位的大小,所以7ul意味着7位等等。

下面是我的函数没有添加Boost库:

用法:BOOST_BINARY(00010001);

int BOOST_BINARY(int a){
    int b = 0;
    
    for (int i = 0;i < 8;i++){
        b += a % 10 << i;
        a = a / 10;
    }
    
    return b;
}

你可以尝试使用bool类型的数组:

bool i[8] = {0,0,1,1,0,1,0,1}