Это из программирования Кочана в C 4-м издании
В этой главе на самом деле не касались масок, но поиск в Интернете дал некоторые хорошие ресурсы. Я написал следующее, цель состоит в том, чтобы проверить, включен ли бит или выключен.
int bit_test(unsigned int x, int n)
{
unsigned int mask, offset;
offset = 32-1-n; //there is another function that counts the bit size (32), removed for brevity
mask = 0x1 << offset;
return x & mask;
}
int main (void)
{
unsigned int x = 63;
int n = 2;
printf("%s\n", bit_test(x,n) ? "On":"Off");
return 0;
}
У меня сложилось впечатление, что число n должно быть числом пробелов справа, которые я хочу проверить. Итак, для 63 мое двоичное представление равно 1111. Поэтому, если N равно 2, это должно быть «Вкл.», Или третье 1 справа - «Вкл.»
Мой фактический вывод «выключен». Когда я добавляю 29 как N, я получаю «вкл», где, исходя из того, как я рассчитывал, он должен быть «выключен». Я подозреваю, что я не использую правильную процедуру, чтобы определить это вручную, считаю ли я слева от 32-битного поля? Есть ли что-то еще, что я пропускаю?
Любое понимание вышесказанного будет оценено, спасибо.