Generating All Bitsets
Posted: December 16, 2020 Filed under: Bit twiddling, C++ Leave a commentHere’s a simple trick for iterating through all bitstrings with bits set only at certain positions (specified by a mask):
#include <cstdint> #include <cstdlib> #include <iostream> #include <bitset> typedef uint16_t T; T nextbitset(T n, T mask) { n |= ~mask; // Set all bits not in the mask n += 1; // Increment n &= mask; // Clear all bits not in the mask return n; } int main(int argc, char *argv[]) { T mask = strtoul(argv[1],0,2), n = 0; // Read in binary do { std::cout << std::bitset<8*sizeof(T)>(n) << "\n"; n = nextbitset(n,mask); } while (n); }
$ g++ -Wall bitset.cpp -o bitset $ ./bitset 100011 0000000000000000 0000000000000001 0000000000000010 0000000000000011 0000000000100000 0000000000100001 0000000000100010 0000000000100011