2014-09-05 1 views
0

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

ответ

6

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

if (0 == (x & (x - 1))) 
{ 
    there_is_only_1_bit = true; 
} 
+2

выражение х & = (х-1) выключится младший бит х, который устанавливается. – Logicrat

Смежные вопросы