2016-12-05 62 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

如果我正确理解,OP不需要人数。查看注释“_I只想检查给定数字的二进制否定是否有1或(2以上)的设置位,我不需要知道确切的设置位数。”# – AlexD