The ~
unary operator is bitwise negation. If you need fewer bits than what fits in an int then you’ll need to mask it with &
after the fact.
To flip the k
least significant bits, use the right mask.
int flipBits(int n, int k) {
int mask = 1;
for (int i = 1; i < k; ++i)
mask |= mask << 1;
return ~n & mask;
}
or you can create a mask without loop:
int flipBits2(int n, int k) {
int mask = (1 << k) - 1;
return ~n & mask;
}