(1)這種方法雖然簡單,但是存在明顯缺陷,當輸入的數為負數時,顯然結果不正确。
#include <stdio.h>
int main()
{
int num = ;
int count = ;
printf("輸入一個數:");
scanf_s("%d", &num);
while (num != )
{
if (num % == )
{
count++;
}
num = num / ;
}
printf("count=%d\n", count);
return ;
}
2.按位與&操作符,兩數二進制序列同位同一出一,其餘出零.拿這個數與一按位與,這樣就可以判斷哪一位為一,哪一位為零.
#include<stdio.h>
int main()
{
int num;
int count = , i = ;
printf("請輸入一個數字:");
scanf_s("%d", &num);
while (i--)
{
if ((num & ) == )//按位與&,同為1時出1
{
count++;
}
num = num >> ;//右移1位,相當于num/2
}
printf("輸出數字在二進制中 1 的個數:");
printf("%d\n", count);
return ;
}
3.舉個例子,輸入9,它的二進制為1001(實際應該在記憶體中以32位存在),8的二進制為1000,那麼它們的二進制序列按位與的結果為1000,而7的二進制序列為0111,二者按位與的結果為0000,循環終止,count自加兩次,是以輸出count的值為2,正确.
#include <stdio.h>
int main()
{
int num = ;
int count = ;
printf("輸入一個數:");
scanf_s("%d", &num);
while (num != )
{
count++;
//将它與它相鄰的數按位與
num = num&(num - );
}
printf("count=%d\n", count);
return ;
}