天天看點

輸入一個整型變量,求它二進制位中含有1的個數

(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 ;
}
           

繼續閱讀