Раствор из top answer являетсяСдвиг вправо с побитового И
Чтобы проверить немного, сдвиг числа х вправо, то побитовое И это:
bit = (number >> x) & 1;
Это поставит значение бит x в бит переменной.
Что меня смущает это, когда предполагая следующее:
unsigned number = 5; //0101
int x = 2; //
После сдвига (number >> x)
мы получаем 0001
. Но мы сдвинутые биты 1 и 2 и поэтому, когда мы делаем побитовое И, не мы делаем это против немного третьего и не второй, где x = 2
? Не означает ли это, что если я хочу, чтобы проверить, если бит x
установлен, я не должен делать:
bit = (number >> (x - 1)) & 1);
Я думаю, что мы делаем это против 3-го бита справа, так как мы вытащили 2 бита, и теперь мы на третьем. – MathBunny
«бит n» является (n + 1) -й бит. – Olaf
Рассмотрите возможность проверки на первый бит ... там не нужно будет сдвигаться, поэтому при сдвиге n бит вы проверите бит n + 1. –