2016-12-05 2 views
0

Я пытаюсь проверить количество установленных битов 2 или более в отрицании числа. Я пытаюсь это сделать, проверяя, имеет ли число значение 2. Но он не работает с отрицанием числа. Это мой код:Проверить количество заданных битов 2 или более в числе отрицательных бит

unsigned long int x = ~x; //x is given number 
if(!(x & (x - 1))) printf("it have only one set bit); 

У вас есть какой-либо sugestion?

+0

Не получилось, что вам нужно. Если нужно считать биты, посмотрите на этот ответ: http://stackoverflow.com/a/21863332/2002198 –

+0

Я хочу проверить только двоичное отрицание заданного числа, у которого есть 1 или (2 и более) бит. Мне не нужно знать точное количество битов. – Tomasz

+0

Вы знаете, как проверить, установлено ли число с 1 бит. Любое ненулевое число, которое не имеет 1 битового набора, имеет как минимум 2 бита. –

ответ

0

Одним из лучших решений для нахождения числа заданных битов (населения) в беззнаковое целое представление числа является с Stanford Bit Twiddling Hack:

/* get number of 1's in binary number (population - pop) */ 
int getn1s (unsigned v) { 
    v = v - ((v >> 1) & 0x55555555);     // reuse input as temporary 
    v = (v & 0x33333333) + ((v >> 2) & 0x33333333);  // temp 
    return (((v + (v >> 4)) & 0xF0F0F0F) * 0x1010101) >> 24; 
} 

Оно было опубликовано в ряде вариантов, и имеется общая форма для до 128-битных номеров.

+0

Если Я правильно понял, ОП не хочет подсчета населения. См. Комментарий «_I только хочу проверить, что двоичное отрицание данного номера имеет 1 или (2 и более) биты набора. Мне не нужно знать точное количество установленных бит. – AlexD

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