Учитывая 32- или 64-битное целое число в C ++ 03, как эффективно определить, установлен ли ровно один бит или нет? (например, значение в точности равно 1, 2, 4, 8, 16, 32 и т. д.) Существуют ли какие-либо встроенные в библиотеку C ++ 03 (или, если не так, C ++ 11), которые будут эффективно работать на любом оборудовании, с которым я столкнулся? Быть на? Я хотел бы использовать это для распадающегося сообщения, которое встречается все реже в нескольких случаях.
Если у вас есть целое число x
что уже известно, что оно не равно нулю, то
if (0 == (x & (x - 1)))
{
there_is_only_1_bit = true;
}