Если вы имеете дело с примитивом, просто используйте побитовые операции:
int bits = 0x0030;
bool third_bit = bits & 0x0004; // bits & 00000100
bool fifth_bit = bits & 0x0010; // bits & 00010000
Если x
может быть больше, чем простой примитив, но известен во время компиляции, тогда вы можете использовать std::bitset<>
для задачи:
#include<bitset>
#include<string>
// ...
std::bitset<512> b(std::string("001"));
b.set(2, true);
std::cout << b[1] << ' ' << b[2] << '\n';
std::bitset<32> bul(0x0010ul);
Если x
не известен во время компиляции, тогда вы можете использовать std::vector<unsigned char>
, а затем использовать битовую манипуляцию во время выполнения. Это больше работы, намерение читается менее очевидно, чем с std::bitset
, и медленнее, но это, возможно, ваш лучший вариант для x
, изменяющегося во время выполнения.
#include<vector>
// ...
std::vector<unsigned char> v(256);
v[2] = 1;
bool eighteenth_bit = v[2] & 0x02; // second bit of third byte