Как эффективно определить, является ли вес Хэмминга целым числом ровно одним?

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

1 ответ

Решение

Если у вас есть целое число x что уже известно, что оно не равно нулю, то

if (0 == (x & (x - 1)))
{
  there_is_only_1_bit = true;
}
Другие вопросы по тегам