Скажем, мы говорим о 32-битных целых числах.Я предполагаю, что вы хотите знать, установлен ли ЛЮБОЙ бит ODD SET (1).
Для этого мы создаем целое число, которое выглядит следующим образом:
10101010101010101010101010101010
Теперь, если мы AND (&
) этим все четные биты отфильтровываются.Теперь, если число не равно нулю, был установлен один или несколько нечетных битов.В C:
#include <stdint.h>
int hasodd(uint32_t x) {
// 0xAAAAAAAA = 10101010101010101010101010101010
// double negation to turn x>0 into 1 and leave 0 alone
return !!(x & 0xAAAAAAAA);
}
Если вы имели в виду, что должны возвращать, установлен ли N-й бит, это работает.Он сдвигает 1
вправо в правильное положение, чтобы отфильтровать все ненужные биты:
#include <stdint.h>
int nthbitset(uint32_t x, int n) {
return x & (1 << n);
}